2015-02-09 90 views
0

我有一組數據在Microsoft SQL Server中看起來如下所示。將SQL拆分字段結果分爲兩個基於值的分組

|** ITEM **|**    DESCRIPTION     **|** CODE **| 
1000   Dummy Description for Item 1000    500 
1000   Dummy Description for Item 1000    500 
1000   Dummy Description for Item 1000    500 
1000   Dummy Description for Item 1000    200 
1000   Dummy Description for Item 1000    200 
1001   Dummy Description for Item 1001    200 
1001   Dummy Description for Item 1001    200 
1001   Dummy Description for Item 1001    500 
1001   Dummy Description for Item 1001    200 
1001   Dummy Description for Item 1001    200 

我想組項目值在一起,然後將CODE字段分成兩個示出了用於每個項目CODE = 500和200的計數。這會導致這樣的事情...

|** ITEM **|**    DESCRIPTION     **|** 500_CODE **| ** 200_CODE **| 
    1000   Dummy Description for Item 1000    3    2 
    1001   Dummy Description for Item 1001    4    1 
+1

GROUP BY項和描述,使用兩個SUM的(與案件碼= 500和案例代碼= 200)。 – jarlh 2015-02-09 09:48:12

回答

2

試試這個:

select item, 
     description, 
     sum(case code when 200 then 1 else 0 end) two_hundreds, 
     sum(case code when 500 then 1 else 0 end) five_hundreds 
    from Table1 
group by item, 
     description 

您可以查看演示在SQLFiddler here

+0

謝謝mucio的答案和小提琴示例 – psycho 2015-02-09 10:30:04

+0

我認爲在上面的查詢中,如果您使用代碼而不是組中的描述,那麼查詢會更有效率。 – KumarHarsh 2015-02-09 10:34:41

0

該查詢會給你一個計數中的每一個代碼基,

SELECT 
     [Item], 
     [Description], 
     [Code], 
     COUNT(*) [Count] 
    FROM 
     [Table1] 
    GROUP BY 
     [Item], 
     [Description], 
     [Code]; 

Fiddle here

這可能足以滿足您的需求,如果你真的要轉總計的列,您可以使用PIVOT

SELECT 
     [Item], 
     [Description], 
     [200] [200_Code] 
     [500] [500_Code] 
    FROM 
(SELECT 
     [Item], 
     [Description], 
     [Code] 
    FROM 
     [Table1]) [Source] 
PIVOT 
(
    COUNT([Code]) FOR [Code] IN ([200], [500]) 
) [Pivot]; 

See Fiddle