Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как построить запрос [D7, dBase, FoxPro]


Страницы:   1 2

andrey-406 ©   (2007-02-14 10:55:00) 

Есть 4 таблицы: организации (contragents), контракты (contracts) приложения(Apps),акты(Akts),платежи(Pays). Контракты связаны с огранизациями по полю contrag_id, а приложения,акты,платежи связаны с контрактами по полю contr_id. Приложения, платежи,акты имеют поле суммы(summa). Необходимо построить запрос,который выводит
номер контракта,номер организации, с кот. он связан и главное запрос должен выводить общие суммы всех актов,платежей,приложений,связанных с этим контрактом. И у меня никак не получается это сделать, может кто поможет?
Вот я пытался написать подобный запрос для одних только платежей,но почему то сумма получается пустая

SELECT org.contr_id,contr.contr_id,(SELECT SUM(p.summa) FROM pays p WHERE p.contr_id = contr.contr_id) as sumpay
 
FROM  Contragents Org, Contracts contr
   
WHERE (contr.contrag_id = org.contr_id)


Sergey13   (2007-02-14 11:43:00) [21]

> [4] andrey-406   (14.02.07 11:34)
> так я давно писал,но оно выдает суммы больше чем надо.
Значит с ошибкой писал.
Кстати там надо поля вроде исправить.
SELECT org.contr ag_id,contr.contr_id
ну и в груп бай соответственно


andrey-406   (2007-02-14 11:37:00) [22]

вот если бы можно было например использовать в функции суммы DISTINCT не для самих сумм,а для значений ключа


andrey-406   (2007-02-14 11:34:00) [23]

так я давно писал,но оно выдает суммы больше чем надо. Ведь перекрестное соединение таблиц дает ВСЕ наборы значений, т.е. для данной пары контракт-контрагент будет сформировано несколько записей с одинаковыми актами или платежами. В том то и дело что надо как то иначе...


Sergey13   (2007-02-14 11:26:00) [24]

SELECT org.contr_id,contr.contr_id,SUM(p.summa),SUM(Ak.summa),SUM(Ap.summa)
FROM  Contragents Org, Contracts contr, pays p, Akts Ak, Apps Ap
WHERE contr.contrag_id = org.contr_id
and p.contr_id = contr.contr_id
and Ak.contr_id = contr.contr_id
and Ap.contr_id = contr.contr_id
Group by org.contr_id,contr.contr_id


andrey-406   (2007-02-14 11:20:00) [25]

не совем понял, а как может помочь GROUP BY. По каким полям группировать данные,ведь надо в одном запросе вывести общие суммы и платежей,и актов и контрактов.Если бы что то одно,проблем бы не было. А по поводу вложенного запроса, там вроде тоже нечего группировать, но я не пойму почему он не работает


Sergey13   (2007-02-14 11:02:00) [26]

Почитай в хелпе (LocalSQL.hlp) про Group by.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо