2014-09-23 94 views
0

寻找帮助来旋转结果集,因为我对它很陌生。SQL PIVOT结果集

这里我将测试数据插入表中。

 CREATE TABLE #temp (procCode int, member_id varchar(10)) 

     INSERT INTO #temp(procCode,member_id) 
     SELECT 90658,'jjjj' 
     UNION all 
     SELECT 90658,'k' 
     UNION all 
     SELECT 90658,'jjjkk' 
     UNION all 
     SELECT 90658,'jjjj' 
     UNION all 
     SELECT 90658,'k' 
     UNION all 
     SELECT 90658,'jjjkk' 
     UNION all 
     SELECT 90658,'jjjj' 
     UNION all 
     SELECT 90658,'k' 
     UNION all 
     SELECT 90649,'jjjj' 
     UNION all 
     SELECT 90649,'k' 
     UNION all 
     SELECT 906,'jjjj' 
     UNION all 
     SELECT 906,'jjjj' 


     select 
     member_id,procCode, COUNT(*) as countProcCode 
     FROM #temp 
     GROUP BY member_id,procCode 

这现在这样的输出数据:

member_id  procCode  CountProcCode 
jjjj    906    2  
jjjj    90649    1 
jjjkk    90658   2 
    k    90649    1 
jjjj    90658    3 
k    90658   3 

我怎么需要它显示是这样的:

member_id Count906 count90649  count90658 
jjjj   2    1    3 
k    0    1    3 
jjjkk   0    0    2 

任何帮助是极大的赞赏。 除了这些procCodes和member_id之外,还有更多可能出现的额外元素,所以我无法真正说出(506,50658,50649)中的member_id。

回答

0
DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX); 

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.procCode) 
      FROM #temp c 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT member_id, ' + @cols + ' from 
      (
       select member_id, member_id as b 
        , procCode 

       from #temp 
      ) x 
      pivot 
      (
       count(b) 
       for procCode in (' + @cols + ') 
      ) p ' 


execute(@query) 

drop table #temp 

结果

member_id 906 90649 90658 
jjjj  2 1  3 
jjjkk  0 0  2 
k   0 1  3 

Recomended reading

+3

如何非常合适!不仅问题被证明是与链接问题的重复,而且你的答案看起来几乎就是所接受问题的答案的确切副本。你甚至使用了相同的变量名称和格式,真是太棒了! – 2014-09-24 12:03:55

+0

@AndriyM对不起,如果这冒犯了某人。即使基于以前的解决方案,我也很难找到解决方案。我通过解决SO中的问题来学习SQL。在这些条件下,对我来说变得很难,也许op与之相抗争,并且证明他对我发现的东西有用。并通过你的上/下投票和解释/评论来检查它是否是一个有效的解决方案。 – Horaciux 2014-09-24 12:13:36

+0

我也很抱歉,我可能有点过度嘲讽。我明白,您并不是盲目地复制您找到的解决方案,而是为了满足OP的需要而付出一些努力。然而,首先引起我评论的主要问题是,您的解决方案显然是基于其他答案,但您并未将原始作者信任为单个词或链接。 – 2014-09-24 12:33:33