Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.20;
Скачать: CL | DM;

Вниз

Построение отчета   Найти похожие ветки 

 
sumrak   (2002-12-25 18:04) [0]

У меня есть таблица на основе которой требуется построить отчет. Но для этого снчала нужно сделать два запроса к этой таблице (Query1 и Query2), а потом на основе этих запросов уже строить окончательный отчет с помощью запроса Query3. Скажите как мне лучше это сделать, чтоб это работало побыстрее. У меня из вариантов только создание промежуточных таблиц (по запросам Query1 и Query2), после чего формирование отчета на основе них с помощью запроса Query3. Есть ли более изящные варианты?
Если нет, то подскажите как заполнить таблицу данными, полученными по запросам Query1 и Query2.

Заранее благодарен.


 
MsGuns ©   (2002-12-25 20:00) [1]

Как можно судить об оптимизации запросв, не видя в глаза самих запросов и не представляя даже отдаленно суть решаемой задачи ?

Какую таблицу надо заполнять данными, "полученными по запросам Query1 и Query2" ? Какие данные в этих таблицах ? Это что, типа "Пойди туда-не знаю-куда - принеси то-не знаю что" ?



 
sumrak   (2002-12-25 20:33) [2]

Таблица, по которой нужно сделать отчет имеет следующую структуру:
номер записи - Number (integer)
Дебетовый счет - DtChet (alpha)
Название по дебету - DtAnal (alpha)
Кредетовый счет - KrChet (alpha)
Название по кредиту - KrAnal (alpha)
Сумма - Summa (money)
и некоторые другие поля (дата, номер док-та...)

Query1: (Вытаскиваю записи с 60-м дебетовым счетом)
INSERT INTO suppl(Number, DtChet, DtAnal, KrChet, KrAnal, Summa)
SELECT Number, DtChet, DtAnal, KrChet, KrAnal, Summa
FROM postavki
WHERE DtChet="60"

Query2: (Вытаскиваю записи с 60-м кредитовым счетом)
INSERT INTO shop(Number, DtChet, DtAnal, KrChet, KrAnal, Summa)
SELECT Number, DtChet, DtAnal, KrChet, KrAnal, Summa
FROM postavki
WHERE KrChet="60"

На основе созданных таблиц делаю следующий запрос:
SELECT Sp.DtAnal, Sp.KrChet, Sp.KrAnal, Sp.Summa AS SmSp, Sh.Summa AS SmSh
FROM shop Sh, suppl Sp
WHERE Sp.DtChet=Sh.KrChet AND Sp.DtAnal=Sh.KrAnal
GROUP BY Sp.DtAnal, Sp.KrChet, Sp.KrAnal, SmSp, SmSh

В итоге мне нужно получить отчет вида:
DtAnal | KrChet | KrAnal | SmSp-SmSh

В общем-то используя вышеприведенные запросы я этого добиваюсь, но может быть есть более оптимальное решение этой проблемы?


 
ЮЮ ©   (2002-12-26 03:13) [3]

зачем в последнем запросе GROUP BY ,если нет ни одной аггрегатной функции ?.

Т.к. в первом и во втором запросе каждая запись уникальна по паре полей (Sp.DtChet, Sp.DtAnal) в первом и (Sh.KrChet, Sh.KrAnal) во втором и каждой записи в одном запросе соответствует ровно одна в другом, то почему не сделать сразу один запрос:

SELECT Number, DtChet, DtAnal, KrChet, KrAnal, Summa
FROM postavki Sp, postavki Sh
WHERE Sp.DtChet=Sh.KrChet AND Sp.DtAnal=Sh.KrAnal
AND Sp.DtChet="60" AND Sh.KrChet=Sp.DtChet





 
MsGuns ©   (2002-12-26 12:15) [4]

SELECT Sp.DtAnal, Sp.KrChet, Sp.KrAnal, Sp.Summa-Sh.Summa Summa
FROM postavki Sp, postavki Sh
WHERE Sp.DtChet=Sh.KrChet AND Sp.DtAnal=Sh.KrAnal
AND Sp.DtChet="60" AND Sh.KrChet=Sp.DtChet






Страницы: 1 вся ветка

Текущий архив: 2003.01.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.02 c
1-62510
race
2003-01-10 16:06
2003.01.20
dll


14-62757
kronprince
2003-01-04 18:13
2003.01.20
Хотел задать очередной наболевший вопрос но передумал :(


3-62393
Sergy
2002-12-25 15:09
2003.01.20
DBgrid и MultiSelect


3-62386
ledzzz
2002-12-25 11:43
2003.01.20
компонент dxDBGrid (dev express)


3-62370
Юляша
2002-12-24 11:19
2003.01.20
DBComboBox