2015-02-09 139 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