2016-11-28 117 views
-1

有人可以幫助查詢嗎? 我這裏有一個表:SQL group by,sum,total query

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) 

我期待像這樣的輸出:

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

但這個查詢返回的冗餘數據:

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] 

有什麼建議?

回答

0

Group By將根據'狀態'返回一行,這就是爲什麼你得到4行。

這是你想要的查詢。儘管您可能想要轉發數據。

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