2016-11-28 5 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

Группа, которая собирается вернуть одну строку на «Статус», поэтому вы получаете 4 строки.

Этот запрос вы хотите. Хотя вы можете повернуть данные.

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