Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как выполнить запрос?  [new]
savmon
Member

Откуда:
Сообщений: 21
Есть 2 таблицы: список пачек opl (id, ...) и содержимое пачек opl_data (id, parentid, pay, uch, ...) привязка opl.id=opl.data_parentid.
Необходимо запросом вывести opl.id, sum(pay) при uch=0, sum(pay) при uch=1...
Как это можно реализовать? Пробовал следующий запрос. Выводит некорректные данные.
SELECT opl.id, SUM(opl_data.pay), SUM(opl_data1.pay)  
FROM opl WITH (NOLOCK) INNER JOIN opl_data WITH (NOLOCK) ON opl.id = opl_data.parentid 
INNER JOIN opl_data opl_data1 WITH (NOLOCK) ON opl.id = opl_data1.parentid
WHERE opl_data.uch=0 and opl_data1.uch=1
GROUP BY opl.id
8 июн 09, 07:05    [7274909]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
select
	opl.id
	, sum(case opl_data.uch
			when 0 then opl_data.pay
			else 0
			end
		) as uch_0
	, sum(case opl_data.uch
			when 1 then opl_data.pay
			else 0
			end
		) as uch_1
from opl 
inner join opl_data  on opl.id = opl_data.parentid 
	and (opl_data.uch = 0 or opl_data1.uch = 1)
group by opl.id
8 июн 09, 07:21    [7274916]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос?  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
DECLARE @opl TABLE (id int)
DECLARE @opl_data TABLE (id int, parentid int, pay int, uch int)

INSERT INTO @opl (id)
SELECT 1 
UNION ALL SELECT 2

INSERT INTO @opl_data (id, parentid, pay, uch)
SELECT 1,1,100,0
UNION ALL SELECT 2,1,200,1
UNION ALL SELECT 3,2,300,0
UNION ALL SELECT 4,2,400,2
UNION ALL SELECT 5,1,500,1

SELECT O.id,SUM(OD.pay),SUM(OD1.pay) FROM @opl AS O
LEFT JOIN @opl_data AS OD ON OD.parentid=O.id AND OD.uch=0
LEFT JOIN @opl_data AS OD1 ON OD1.parentid=O.id AND OD1.uch=1
GROUP BY O.id

?Картинка с другого сайта.
8 июн 09, 07:29    [7274921]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос?  [new]
нектотам
Guest
DENIS_CHEL
....
?Картинка с другого сайта.

Неправильный запрос, причём ошибка классическая. Проверь на таких данных:
DECLARE @opl TABLE (id int)
DECLARE @opl_data TABLE (id int, parentid int, pay int, uch int)

INSERT INTO @opl (id)
SELECT 1 

INSERT INTO @opl_data (id, parentid, pay, uch)
SELECT 1,1,100,0
UNION ALL SELECT 2,1,200,1
UNION ALL SELECT 3,1,400,0
UNION ALL SELECT 4,1,800,1
UNION ALL SELECT 5,1,1600,0

SELECT O.id,SUM(OD.pay),SUM(OD1.pay) FROM @opl AS O
LEFT JOIN @opl_data AS OD ON OD.parentid=O.id AND OD.uch=0
LEFT JOIN @opl_data AS OD1 ON OD1.parentid=O.id AND OD1.uch=1
GROUP BY O.id
8 июн 09, 08:05    [7274947]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос?  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
нектотам
Неправильный запрос, причём ошибка классическая. Проверь на таких данных:


выходные удались Картинка с другого сайта., спасибо за то, что указали на ошибку, вариант от tpg рулит...

PS можно наверно и так подправить мой запрос...
DECLARE @opl TABLE (id int)
DECLARE @opl_data TABLE (id int, parentid int, pay int, uch int)

INSERT INTO @opl (id)
SELECT 1 

INSERT INTO @opl_data (id, parentid, pay, uch)
SELECT 1,1,100,0
UNION ALL SELECT 2,1,200,1
UNION ALL SELECT 3,1,400,0
UNION ALL SELECT 4,1,800,1
UNION ALL SELECT 5,1,1600,0

SELECT O.id,(SELECT SUM(pay) FROM @opl_data WHERE parentid=O.id AND uch=0) 
,(SELECT SUM(pay) FROM @opl_data WHERE parentid=O.id AND uch=1) 
FROM @opl AS O

если id в opl уникален, то можно GROUP BY O.id не делать...
8 июн 09, 08:35    [7274981]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос?  [new]
savmon
Member

Откуда:
Сообщений: 21
Спасибо, все получилось.
8 июн 09, 15:08    [7276911]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить