2016-09-17 4 views
0

Ich habe eine Tabelle wie folgt aus:Abfragen für die Aggregation Bedürfnisse in 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 

Ich versuche, die Ausgabe von ID und Spalte der Summe Preis mult Artikel für type = ‚M‘ und eine weitere Spalte mit derselben Logik zu empfangen für type = ‚T‘

Nur Art und Weise, wie es für mich zu tun ist, multi-CTE verwenden, aber es ist eine Art von komplexen und großen:

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 

ein bestimmtes Gefühl zu haben, dass es besser gemacht werden kann (zum Beispiel unter Verwendung von Unterabfragen) -Auftrag y ou wie kann es gemacht werden.

p.s.

SQLlite Zeug würde sehr geschätzt werden!

Danke!

Antwort

1

Vielleicht wird dies helfen

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 

Returns

ID M  T 
1 46.00 0.00 
2 0.00 68.00 
+1

Das in SQLite funktioniert nicht. –