Форум: "Начинающим";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];
Вниззапрос SQL Найти похожие ветки
← →
rosl (2007-04-23 03:33) [0]Уважаемые мастера, подскажите пожалуйста.
есть таблицы:
shet
id_key number_shet data_shet
1 1 01.01.2007
shet_link
cena shet_link
75 1
200 1
spisanie
summa shet_fakt
100 1
9,87 1
нужно сделать запрос, какая сумма по счёту и сколько списано:
делаю запрос:
select shet.NUMBER_SHET, shet.DATE_SHET, sum(lnk.CENA), sum(opl.SUMMA)
from SHETS shet, SHET_LINK lnk, SPISANIE opl
where lnk.LINK_SHET = shet.ID_KEY
and opl.SHET_FAKT = shet.ID_KEY
group by shet.NUMBER_SHET, shet.DATE_SHET
результат:
number_shet data_shet cena summa
1 01.01.2007 550 219.74
суммы задваиваются. нужно:
number_shet data_shet cena summa
1 01.01.2007 275 109,87
← →
ЮЮ © (2007-04-23 04:53) [1]в запросах главное не [D7, XP], а СУБД и компоненты доступа, т.к. в рамках элементарного и поддерживаемого всеми синтаксиса SQL задачу, ИМХО, не решить: агрегатные запросы надо делать отдельно к SHET_LINK и SPISANIE, а затем соединять в один набор
← →
rosl (2007-04-23 05:04) [2]в форме вопроса нет типа СУБД.
использую Ibase7.
если можно, то поподробнее про "агрегатные запросы надо делать отдельно к SHET_LINK и SPISANIE, а затем соединять в один набор". если несложно, к этим данным запрос.
я делал CREATE VIEW. может есть способ проще?
← →
rosl (2007-04-23 05:05) [3]компоненты доступа обыкновенные IBQuery1
← →
rosl (2007-04-23 10:15) [4]разобрался - CREATE VIEW
← →
Sergey13 © (2007-04-23 10:21) [5]> [4] rosl (23.04.07 10:15)
Я не особо въехал в твою структуру. Возможно несколько ее видоизменив можно избавиться от ошибки (непонятной какой то).
В качестве шаманства можно попробовать связать по другому таблицы.where lnk.LINK_SHET = shet.ID_KEY and opl.SHET_FAKT = lnk.LINK_SHET
← →
ЮЮ © (2007-04-23 11:32) [6]> [5] Sergey13 © (23.04.07 10:21)
Как ни связывай, если в ожной подчиненной таблице N записей, а во второй - M, при связи главной таблицы с двумя подчиненными получим M x N записей, т.е. сумма по первой таблице будет в M раз больше ожидаемой, а по второй - в N.
P.S. В принципе ожидаемое увеличение можно посчитать и разделить полученную сумму на него
← →
Sergey13 © (2007-04-23 11:55) [7]> [6] ЮЮ © (23.04.07 11:32)
Да действительно. Ни разу не сталкивался.
Тогда только так
select t1.id,
(select sum(t2.f2) from t2 where t2.id = t1.id) as Sum1,
(select sum(t3.f2) from t3 where t3.id = t1.id) as Sum2
from t1
← →
rosl (2007-04-23 15:03) [8]может воспользуюсь советом Sergey13 ©.
я просто создал два представления, а потом вытянул оттуда уже сгруппированные данные.
вложенные запросы пробовал делать (типа select ... (select...)), но IB ругался. Скорее всего неправильно что-то писал (учусь).
Всё равно, ОГРОМНОЕ спасибо за помощь.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c