2016-11-28 119 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]