![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите оптимизировать запрос... [D5, MSSQL]
Just_Dont_Know © (2002-10-28 16:25:00)Доброго всем дня! Помогите пожалуйста с запросом. Если все упростить, то получится следующая картина
Есть 2 одинаковый таблицы:
[Boly]
F_ID - не ключ
How
[Doly]
F_ID - не ключ
How
Надо получить набор данных состоящий из одного столбца:
F_ID,
в котором содержатся только те F_ID для которых разница сумм: SUM(Boly.How) - Sum (Doly.How) > 0.
Вот я сделал 4-хэтажный запрос:
SELECT S5.F_ID FROM (
SELECT S4.F_ID, SUM (s4.SUMA) AS [SUMA2] FROM (
SELECT S2.F_ID, SUM(S2.How) AS [SUMA] FROM Boly S2 GROUP BY S2.F_ID
UNION ALL ( SELECT S3.F_ID, SUM(S3.How*(-1)) AS [SUMA] FROM Doly S3 GROUP BY S3.F_ID )
) S4
GROUP BY S4.F_ID
) S5
WHERE SUMA2 > 0
А можно попроще как нибудь попроще... никак не сооброжу
Just_Dont_Know (2002-10-28 17:07:00) [1]Всем спасибо за предложения!
3JIA9I CyKA (2002-10-28 16:59:00) [2]Sorry опять 8)
select
F_ID = q.F_ID
from
(select
F_ID = IsNull(B.F_ID, D.F_ID),
D_How = IsNull(D.How, 0),
B_How = IsNull(B.How, 0)
from Boly B full join Doly D on B.F_ID = D.F_ID
) q
group by q.F_ID
having sum(q.B_How - q.D_How) > 0
3JIA9I CyKA (2002-10-28 16:55:00) [3]Sorry
select
F_ID = q.D_ID
from
(select
F_ID = IsNull(B.F_ID, D.F_ID),
D_How = IsNull(D.How, 0),
B_How = IsNull(B.How, 0)
from Boly B full join Doly D on B.F_ID = D.F_ID
) q
having sum(q.B_How - q.D_How) > 0
3JIA9I CyKA (2002-10-28 16:54:00) [4]Ку?
select
F_ID = q.D_ID
from
(select
F_ID = IsNull(B.F_ID, D.F_ID),
D_How = IsNull(D.How, 0),
B_How = IsNull(B.How)
from Boly B full join Doly D on B.F_ID = D.F_ID
) q
having sum(q.B_How - q.D_How) > 0
stone (2002-10-28 16:53:00) [5]Есть такое классное слово HAVING - очень подходит для составления подобных запросов. Синтаксис можно посмотреть в хэлпе
MVF (2002-10-28 16:53:00) [6]select boly.f_id, sum(boly.how)-sum(doly.how) as summa
from boly, doly
where boly.f_id = doly.f_id
group by boly.f_id
having sum(boly.how)-sum(doly.how) > 0
Удачи!