2016-11-28 4 views
-1

Kann jemand mit der Abfrage helfen? Ich habe eine Tabelle hier:SQL-Gruppe von Summe Summe Abfrage

CREATE TABLE [dbo].[aas](
    [id] [int] IDENTITY(1,1) NOT NULL, 

    [Status] [nchar](10) NULL, 
    [price] [int] NOT NULL 
) ON [PRIMARY] 

GO 

insert into [dbo].[aas] ([Status], [price]) 
values ('a', 23) 
insert into [dbo].[aas] ([Status], [price]) 
values ('a', 23) 
insert into [dbo].[aas] ([Status], [price]) 
values ('a', 23) 
insert into [dbo].[aas] ([Status], [price]) 
values ('b', 4) 
insert into [dbo].[aas] ([Status], [price]) 
values ('b', 4) 
insert into [dbo].[aas] ([Status], [price]) 
values ('b', 4) 
insert into [dbo].[aas] ([Status], [price]) 
values ('b', 4) 
insert into [dbo].[aas] ([Status], [price]) 
values ('c', 8) 
insert into [dbo].[aas] ([Status], [price]) 
values ('c', 8) 
insert into [dbo].[aas] ([Status], [price]) 
values ('c', 8) 
insert into [dbo].[aas] ([Status], [price]) 
values ('c', 8) 
insert into [dbo].[aas] ([Status], [price]) 
values ('c', 8) 
insert into [dbo].[aas] ([Status], [price]) 
values ('y', 2) 
insert into [dbo].[aas] ([Status], [price]) 
values ('y', 2) 
insert into [dbo].[aas] ([Status], [price]) 
values ('y', 2) 
insert into [dbo].[aas] ([Status], [price]) 
values ('y', 2) 
insert into [dbo].[aas] ([Status], [price]) 
values ('y', 2) 
insert into [dbo].[aas] ([Status], [price]) 
values ('y', 2) 
insert into [dbo].[aas] ([Status], [price]) 
values ('y', 2) 
insert into [dbo].[aas] ([Status], [price]) 
values ('y', 2) 
insert into [dbo].[aas] ([Status], [price]) 
values ('y', 2) 
insert into [dbo].[aas] ([Status], [price]) 
values ('y', 2) 
insert into [dbo].[aas] ([Status], [price]) 
values ('y', 2) 
insert into [dbo].[aas] ([Status], [price]) 
values ('y', 2) 

ich eine Ausgabe wie folgt erwarte:

TotalA TotalPriceA TotalB TotalPriceB TotalC TotalPriceC TotalY TotalPriceY 
3 69 4 16 5 40 12 24 

Aber diese Abfrage liefert redundante Daten:

select 
COUNT(CASE WHEN [status] = 'a' THEN 1 ELSE 0 END) as [TotalA], 
case when [status] = 'a' then 
    sum(price) 
    else 0 
END as [TotalpriceA], 

COUNT(CASE WHEN [status] = 'b' THEN 1 ELSE 0 END) as [TotalB], 
case when [status] = 'b' then 
    sum(price) 
    else 0 
END as [TotalpriceB], 

COUNT(CASE WHEN [status] = 'c' THEN 1 ELSE 0 END) as [TotalC], 
case when [status] = 'c' then 
    sum(price) 
    else 0 
END as [TotalpriceC], 

COUNT(CASE WHEN [status] = 'y' THEN 1 ELSE 0 END) as [TotalY], 
case when [status] = 'y' then 
    sum(price) 
    else 0 
END as [TotalpriceY] 
from [dbo].[aas] 
group by [status] 

Irgendwelche Vorschläge?

Antwort

0

Group By wird eine Zeile pro 'Status' zurückgeben, deshalb erhalten Sie 4 Zeilen.

Dies ist die Abfrage, die Sie möchten. Obwohl Sie die Daten möglicherweise drehen möchten.

SELECT [status], count(*) as 'Total', sum(price) as 'TotalPrice' 
from aas 
group by [status]