Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Еще раз о SQL 
:(
    Опции темы
Cashey
Дата 14.11.2002, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Подскажите как отобрать записи из таблице по уникальным двум символам.
Особо обращаю внимание не записи в которых первый символ заданный (напр. А%), а все записи в которых первые символы уникальны. Нужно для TDecisionQuery.


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Vit
Дата 14.11.2002, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Боюсь, что для большинства баз данных никак. Вообще-то такие вещи не являются стандартом в SQL, следовательно надо читать доку по твоей базе данных конкретно...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Cashey
Дата 14.11.2002, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



База старая создана на Clippere, переведена в win-кодировку через FOX. Объясню всю задачу целиком (может все же кто и сможет помочь, а оно ведь и другим полезным может оказаться) итак в базе ведутся сведения о покупателях в ней нет поля "регион" и никто код региона, где обитает покупатель, в нее отдельно не заносил. Теперь руководству потребовалось получить график продаж по регионам. Единственный способ опредилить из когого региона покупатель это 2 первые цифры его ИНН (такое поле в таблице есть), но как построить такой график неясно. Функции RightStr в SQL нет, а построить график обычными командами Паскаля вроде бы нельзя(или все же можно?). [B]А теперь внимание вопрос: :D Как решить подобныю задачу???


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
МММ
Дата 14.11.2002, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 18.6.2002

Репутация: нет
Всего: 1



Если я правильно понял , то пойдет обычная сортировка
допустим Приморский край 2500000000

select * from table where inn>=250000000 and inn<=259999999

длина инн в зависимости от физ или юр лица

второй способ считывай данные с поля инн, веделяй первые два знака , уже средствами дельфи, и все!!!


--------------------
PM MAIL   Вверх
Vit
Дата 15.11.2002, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



1) Сортировка как сказал МММ
2) Добавь поле и занеси данные - 1 раз пройдёшь по записям, а далее уже всё нормально

Второй способ лучше - будет работать быстрее и корректнее.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Cashey
Дата 15.11.2002, 03:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Первый способ неприемлем, так как нужно количество всех одинаковых первых двух цифр ИНН (ну представте себе как вы по этой методике построите график). Второй способ, гораздо интереснее, но мне неясно как его реализовать.


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Vit
Дата 15.11.2002, 03:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Как реализовать?

1) Делаем кверю "Alter Table" или в дизайне изменяем таблицу, добавляем новое поле
2) C помощью другой программы проходим по всей таблице record-by-record и заполняешь это новое поле
3) Меняешь свою программу - там где дописываются записи в таблицу и/или изменяются добавляешь обработку нового поля
...

Иногда (для некоторых баз данных) попытка засунуть более длинное поле в короткое приводит к обрезанию без сигнала об ошибках - тогда вообще достаточно сделать узкое поле шириной 2 символа (или сколько там надо), одной обычной кверёй "Update" заполнить это поле и если база позволяет триггер - то поставить триггер - тогда код программы вообще не надо менять.




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Cashey
Дата 15.11.2002, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Спосибо вит за теорию, но, пожалйста объясни мне, дураку, как "изъять" символы из записи в ячейке базы, а уж перенести их куда надо я и сам смогу.


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Cashey
Дата 15.11.2002, 04:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Знаете я решил проблему с помощью FOX PRO, там это делается просто:
select left(inn,2);
from TableName;
group by left(inn,2) into table

а для графиков еще проще : сразу

select left(inn,2), count(*);
from TableName;
group by left(inn,2)

Но это в фоксе, а как же мы дельфисты? Неужели ударим в грязь лицом?????


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Vit
Дата 15.11.2002, 05:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Так, давай по порядку. Что ты используешь для доступа - BDE+FOX pro driver? Так тогда попробуй эти квери и послать чуть-чуть видоизменив:

SQL
SELECT SUBSTRING(inn FROM 1 FOR 2)
from TableName





--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vit
Дата 15.11.2002, 05:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Если ты не менял пути установки програм по адресу:

С:\Program Files\Common Files\Borland Shared\BDE\LOCALSQL.HLP

Лежит файл справки по командам локального BDE. Там можно много интересного найти...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vit
Дата 15.11.2002, 05:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Cashey @ 14.11.2002, 11:22)
Но это в фоксе, а как же мы дельфисты? Неужели ударим в грязь лицом?????

При чём здесь Дельфи? Ты же работаешь фактически только с BDE и всё что ты спрашиваешь вообще к Дельфи не имеет ни малейшего отношения - это только использование возможностей BDE драйвера, который ты используешь для доступа к базе данных.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Cashey
Дата 15.11.2002, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Для доступа использую только BDE, а FOX использовал только для занесения в новое поле необходимого фрагмента записи из другого. SUBSTRING не пробовал - моя вина. Пути при установке я менял, но где хелп знаю, но не знаю чего там интересного, кроме формата команд там ничего нет (да и форматы часто неполные что например стоит подсказка по функции format). Теперь о главном: используется действительно BDE, НО для работы с базами, в частности для построения DecisionCube используется SQL и вот тут уже начинает играть роль Delphi or FOX Pro т.к. диалекты языка запросов у них разные. Я до сих пор не знаю как в среде Delphi реализовать некоторые моменты при работе с БД, которые в фоксе делаются одной-двумя командами. Нет это я не для дискуссии о преимуществах одной из сред разработки, просто очень хотелось бы самое хорошее из фокса использовать и в дельфи. Кстати, может будут какие-нибудь рекомендации по совмещению если не исходных кодов, то хотя бы фрагментов программ написанных на этих двух языках?


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Medved
Дата 15.11.2002, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Стандарными средствами локального SQL ты это не сделаешь, придется извращаться (как один из вариантов - через временные таблицы).

Если же ты используешь MS SQL (Transac-SQL) или Oracle (PL/SQL) то там это можно реализовать (как один из вариантов - в виде скрипта).


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Vit
Дата 15.11.2002, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Так SUBSTRING помогло или нет?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.