Вопрос № 85112: Огромная просьба помочь в решении вопроса!
Существует 4 таблицы:
Организации, Договора, Счета к оплате, Платежи
Количество договоров у организаций может быть любым. Количество счетов к оплате по договору также может быть любым, также как ...
Вопрос № 85.112
Огромная просьба помочь в решении вопроса!
Существует 4 таблицы:
Организации, Договора, Счета к оплате, Платежи
Количество договоров у организаций может быть любым. Количество счетов к оплате по договору также может быть любым, также как и платежей (количество платежей может не соответсвовать количеству счетов к оплате)
Структуры таблиц
1) t1
ID NAME
2) t2
DID From_ID
3) t3
SID From_DID S_SUM
4) t4
PID From_DID From_SID P_SUM
Необходимо вывести на каждую организацию разность суммы счетов к оплате и платежей, сумму счетов к оплате, сумму платежей по всем договорам организации.
name,SUM(S_SUM)-SUM(P_SUM),SUM(S_SUM),SUM(P_SUM)
Заранее благодарен!
Отвечает: Синельников Сергей
Здравствуйте, Гарифянов Ильнар Ильдарович!
Вот как-то так:
select name, SUM(S_SUM-P_SUM),SUM(S_SUM),SUM(P_SUM) FROM t1 left outer join (t2 left outer join t3 on t2.did=t3.from_did left outer join t4 on t2.did=t4.from_did) on t1.id=t2.from_id group by name
но, существет одна беда. Если нет ни одного платежа по договору или нет ни одного счета по договору, то SUM будет давать null. По этой же причине надо использовать left outer join, а не Вашу конструкцию связи таблиц. В Вашем варианте такие договора просто не попадут в выборку.
Ответ отправил: Синельников Сергей (статус: 3-ий класс)
Ответ отправлен: 03.05.2007, 07:26 Оценка за ответ: 3
Отвечает: Игорь Елизаров
Здравствуйте, Гарифянов Ильнар Ильдарович!
в данном случае надо использовать вложенные запросы, которые отдельно считают суммы счетов и оплат, например
select t1.name , t3.s_sum - tt4.sum_p
from t1 inner join t2 on t1.id = t2.from_id
left join t3 on t2.did = t3.from_did
left join (select from_sid, sum (s_sum) as sum_p from t4 group by from_sid) tt4
on t3.sid=tt4.from_sid
то есть для каждого счета вычисляем сумму оплат
--------- Пользователь - тоже человек..
Ответ отправил: Игорь Елизаров (статус: 10-ый класс)
Ответ отправлен: 03.05.2007, 09:27 Оценка за ответ: 5