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

방법은 매우 적절한! 질문은 연결된 질문의 중복으로 밝혀 졌을뿐만 아니라 대답은 연결된 질문에 대한 대답의 정확한 사본과 거의 비슷합니다. 동일한 변수 이름과 서식을 사용해도 놀랍습니다. –

+0

@AndriyM 죄송합니다. 이전 솔루션을 기반으로 한 솔루션을 찾는 것이 어려웠습니다. 현재 SO에서 문제를 해결하여 SQL을 배우고 있습니다. 그 용어로 나에게 열심히 변했을 때, 아마도 op는 똑같은 투쟁이었고, 내가 찾은 것을 공유하는 데 유용 할 것으로 판명되었다. 또한 위/아래 투표와 설명/비평을 통해 유효한 해결책인지 확인하십시오. – Horaciux

+0

나도 조금 지나치게 유감 스럽다. 발견 한 솔루션을 맹목적으로 복사하지 않고 대신 OP의 요구 사항에 맞게 일부 노력을 기울였습니다. 그러나 내가 처음에 논평하게 된 주된 문제는 솔루션이 다른 대답을 기반으로 한 것처럼 보이지만 원래 작성자에게 단일 단어 또는 링크를 제공하지 않았기 때문입니다. –