Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.045 c
1-1174011762
VitAngel
2007-03-16 05:22
2007.05.13
Прозрачный логотип


15-1176737810
@!!ex
2007-04-16 19:36
2007.05.13
Кривая по трем точкам.


2-1177323898
Grant
2007-04-23 14:24
2007.05.13
Построение графиков


4-1164404967
Kaharin
2006-11-25 00:49
2007.05.13
Как определить работает дисплей (монитор) или нет


2-1177488098
Riply
2007-04-25 12:01
2007.05.13
ReadFileEx - место "повторного вызова".





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский