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

Вниз

запрос 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
2-1176895225
Ксандр
2007-04-18 15:20
2007.05.13
хеш функция


2-1177061949
_Илья
2007-04-20 13:39
2007.05.13
Кодировка строк


2-1177087956
likenoother
2007-04-20 20:52
2007.05.13
замена Timage


15-1176460796
pasha_golub
2007-04-13 14:39
2007.05.13
Розыч. С Днюхой мы тебя чичас поздравлять будем :)


15-1176274427
ocean
2007-04-11 10:53
2007.05.13
Действительно, куда там Донцовой