Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2008, 17:24   #1
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию SQL. Объединение таблицы с собой

В таблице циклично выполняются два вот таких запроса
Код:
QTemp.Close;
QTemp.SQL.Clear;
QTemp.SQL.Add('Select sum(summa) from oper  Where (debet = "' + NUMBER_SCH + '") And (data >= "' + dStart + '") And (data <= "' + dEnd + '")');
QTemp.Open;
summaD := QTemp.Fields[0].AsFloat;

QTemp.Close;
QTemp.SQL.Clear;
QTemp.SQL.Add('Select sum(summa) from oper  Where (kredit = "' + NUMBER_SCH + '") And (data >= "' + dStart + '") And (data <= "' + dEnd + '")');
QTemp.Open;
summaK := QTemp.Fields[0].AsFloat;
Думаю, зачем их два? Объединил в один вот такой запрос
Код:
QTemp.Close;
QTemp.SQL.Clear;
QTemp.SQL.Add('Select sum(a.summa), sum(b.summa) from oper a, oper b  Where (a.debet = "' + NUMBER_SCH + '") and (b.kredit = "' + NUMBER_SCH + '") And (data between "' + dStart + '" And "' + dEnd + '")');
QTemp.Open;
summaD := QTemp.Fields[0].AsFloat;
summaK := QTemp.Fields[1].AsFloat;
...и стало работать раз в 5 медленнее. Это сложный запрос такие "тормоза" даёт или я делаю что-то не то?
_SERGEYX_ вне форума Ответить с цитированием
Старый 02.06.2008, 17:40   #2
D-mon
Форумчанин
 
Регистрация: 22.06.2007
Сообщений: 414
По умолчанию

И не удивительно, оно те соединяет 2-ве таблицы ХЗ как. Вот так попробуй.
# QTemp.Close;
# QTemp.SQL.Clear;
# QTemp.SQL.Add('Select sum(summa) from oper Where (debet = "' + NUMBER_SCH + '") And (data >= "' + dStart + '") And (data <= "' + dEnd + '") union '+'Select sum(summa) from oper Where (kredit = "' + NUMBER_SCH + '") And (data >= "' + dStart + '") And (data <= "' + dEnd + '")');
# QTemp.Open;
# summaD := QTemp.Fields[0].AsFloat;
Нет невыполнимых задач, всё дело времени...

Последний раз редактировалось D-mon; 02.06.2008 в 17:44.
D-mon вне форума Ответить с цитированием
Старый 02.06.2008, 21:52   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

добавить к запросу and (a.id=b.id) где id поле однозначно определяющее запись. Если конечно же такое поле в табице имеется.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение ячеек Katherina_Koval Microsoft Office Excel 3 29.07.2008 06:53
Объединение списков. life_burns Microsoft Office Excel 5 05.04.2008 16:13
Объединение GWT-модулей ILester JavaScript, Ajax 0 24.10.2007 14:55
Объединение заказов asale Microsoft Office Excel 6 22.10.2007 19:05
Как сравнить элементы 2 массивов между собой? DragonionS Общие вопросы Delphi 1 01.07.2007 21:49