2016-02-11 122 views
0

我怎麼可以做如下的結果在SQL Server中設置一個支點:SQL Server的數據透視查詢(通過簡單的羣體?)

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] 

作爲一個側面說明,你應該避免使用保留字,如COUNTSUM作爲列名。

+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

這就是SO是人約@ RAP – mohan111