2012-08-09 3 views
0

피벗 함수를 사용하여 열의 행 값을 별도의 열로 변환하려고합니다. 해당 열에 100 개 이상의 고유 값이 있으며 피벗 함수의 'for'절에있는 각 단일 값을 하드 코딩하는 것은 시간이 많이 걸리고 유지 관리 목적으로는 좋지 않습니다. 이 문제를 해결할 더 쉬운 방법이 있는지 궁금합니다.TSQL 피벗 긴 목록 열

감사

+0

가능한 [SQL Server 동적 PIVOT 쿼리?] (http://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query) – RichardTheKiwi

답변

3

당신은이 유형의 쿼리에 대한 PIVOT에서 동적 SQL을 사용할 수 있습니다. 당신이 필요로하는 데이터의 샘플을 게시 할 경우

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

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


set @query = 'SELECT memid, ' + @cols + ' from 
      (
       select MemId, Condition_id, condition_result 
       from t 
      ) x 
      pivot 
      (
       sum(condition_result) 
       for condition_id in (' + @cols + ') 
      ) p ' 


execute(@query) 

SQL Fiddle with Demo

참조 : 동적 SQL은 각 항목에 하드 코딩 할 필요를 방지 할 수 있으며, 실행에 변환 할 항목의 목록을 얻을 것이다 변환하려면 내 쿼리를 조정하여 시연 할 수 있습니다.