2016-02-11 80 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