2016-02-11 5 views
0

Как я могу сделать стержень на следующем наборе результатов в SQL Server:Sql Server Pivot Query (простая группа по?)

Source  Type Count Sum 
-------------------------------------- 
Apple  FALSE 67  153981 
Egg   FALSE 115  75821 
Egg   TRUE 832  112773 
Jam   FALSE 81  71758 
Jam   TRUE 648  85784 
Other  FALSE 1228 521206 
Other  TRUE 2  282 
Pineapple FALSE 521  1292074 
Pineapple TRUE 698  146585 
Watermelon FALSE 1146 1815607 
Watermelon TRUE 4157 761837 

Мой конечный результат должен выглядеть следующим образом. Я думаю, что это не может быть сделано простой группой, если я прав?

Source  TRUE FALSE Sum 
-------------------------------------- 
Apple  0  67  153981 
Egg   832  115  188594 
Jam   648  81  157542 
Other  2  1228 521488 
Pineapple 698  521  1438659 
Watermelon 1146 4175 2577444 

Цените свою помощь!

ответ

1

Вы можете сделать это с помощью условной агрегации:

SELECT 
    [Source], 
    [True] = SUM(CASE WHEN [Type] = 'TRUE' THEN [Count] ELSE 0 END), 
    [False] = SUM(CASE WHEN [Type] = 'FALSE' THEN [Count] ELSE 0 END), 
    [Sum] = SUM([Sum]) 
FROM tbl 
GROUP BY [Source] 

Как примечание стороны, следует избегать использования зарезервированных слов, таких как COUNT и SUM как ваши имена столбцов.

+0

Спасибо, вы сделали это просто для меня :) – RAP

0

может быть это другой способ ответить на тот же результат, установленный с помощью PIVOT

DECLARE @Table1 TABLE 
    (Source varchar(10), Type varchar(5), Count int, Sum int) 
; 

INSERT INTO @Table1 
    (Source, Type, Count, Sum) 
VALUES 
    ('Apple', 'FALSE', 67, 153981), 
    ('Egg', 'FALSE', 115, 75821), 
    ('Egg', 'TRUE', 832, 112773), 
    ('Jam', 'FALSE', 81, 71758), 
    ('Jam', 'TRUE', 648, 85784), 
    ('Other', 'FALSE', 1228, 521206), 
    ('Other', 'TRUE', 2, 282), 
    ('Pineapple', 'FALSE', 521, 1292074), 
    ('Pineapple', 'TRUE', 698, 146585), 
    ('Watermelon', 'FALSE', 1146, 1815607), 
    ('Watermelon', 'TRUE', 4157, 761837) 
; 
Select Source, 
     ISNULL(MAX([TRUE]),0)[TRUE], 
     ISNULL(MAX([FALSE]),0)[FALSE], 
     ISNULL(MAX(SUM),0)SUM 
FROM (
Select Source,Sum,[TRUE],[FALSE]  
    from (
select Source, Sum,Count,Type 
    from @Table1)T 
PIVOT (MAX(Count) FOR 
     Type IN([TRUE],[FALSE]))P)TT 
GROUP BY TT.Source 
+0

Спасибо за ваше время – RAP

+0

вот что ТАК аль о @ РЭП – mohan111