2016-09-17 2 views
0

У меня есть таблица вроде этого:подзапросов для нужд агрегации в SQL

Id Date  Price Item Type 
1 2009-09-21 25  1  M 
2 2009-08-31 16  2  T 
1 2009-09-23 21  1  M 
2 2009-09-03 12  3  T 

Я пытаюсь получить вывод ID и столбца цен суммы крат элементов для типа = «M» и еще один столбец с тем же логикой для типа = «T»

Единственный способ, как сделать это для меня, используя мульти-КТР, но это своего рода сложный и большой:

with cte as (
select distinct a.id, a.date 
sum(price*a.item) as numm 
from table a 
where a.type='M' 
group by a.id), 

crx as (
select cte.id, cte.numm, sum(a.price*a.item) as numm_1 from cte 
join table a on a.id=cte.id and a.date=cte.date 
where a.type='T' 
group by cte.id) 

select * from crx 

Имея определенное ощущение, что это может быть сделано лучше (например, с помощью подзапросов) -заполнение y о как это можно сделать.

p.s.

SQLlite материал был бы благодарен!

Спасибо!

ответ

1

Возможно, это поможет

Declare @YourTable table (Id int,Date date,Price money,Item int,Type varchar(25)) 
Insert into @YourTable values 
(1,'2009-09-21',25,1,'M'), 
(2,'2009-08-31',16,2,'T'), 
(1,'2009-09-23',21,1,'M'), 
(2,'2009-09-03',12,3,'T') 

Select ID 
     ,sum(case when Type='M' then Price*Item else 0 end) as M 
     ,sum(case when Type='T' then Price*Item else 0 end) as T 
From YourTable 
Group By ID 

Возвращает

ID M  T 
1 46.00 0.00 
2 0.00 68.00 
+1

Это не работает в SQLite. –

Смежные вопросы