2014-09-23 127 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