Форум: "Базы";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
ВнизПостроение отчета Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c