2012-06-29 6 views
0

내가 몇 일 동안 벗어났다 후반 응답 죄송합니다, 그리고 정확한 테이블 구조를 지정하지 않는 단일 열 테이블을 돌리십시오. 위의 설명을 무시하십시오. TSQL은

나는 (토론을 위해서 단순화 된 버전) 다음 표를 가지고 : 나는 아래에 설명 된대로 내가 정말 필요에 대한 자세한 정보를 얻을 나의 원래의 질문이 더 이상 유효하지 않습니다 그래서 나는 더 많은 정보가 있습니다. 첫 번째 줄은 헤더입니다 :

VariableID DocumentID Revision Value 
44   12   2   Val1 
45   12   2   Val2 
45   12   3   Val3 
44   13   1   Val4 
46   13   2   Val5 
47   14   1   Val6 
내가 (DocumentId, 개정) 테이블별로 그룹화 다음에 (행 n 개의 가정)를 변환하고 싶습니다

: 변수의 뜻을

Documentid revision variable1 (44) variable2 (45) variable3(46) variable(47) variable (n) 
12   2   Val1   Val2   null   null 
12   3   null   Val3   null   null 
13   1   Val4   null   null   null 
13   2   null   null   Val5   null 
14   1   null   null   null   Val6 

번호 동적으로 검색 할 수 있습니다. 얼마나 많은 변수가 입력으로 소스 테이블에 있을지 모르겠다.

알려 주시기 바랍니다. 당신이 찾고있는 무슨처럼

답변

0

피벗 연산자 소리, 그것은 모두 Microsoft SQL Server 및 Microsoft Access에서 사용할 수 있으며, 나는 그것이 비록베이스에서 사용할 수 있는지 확실하지 않습니다. 당신은 당신의 현재 테이블 구조 나 샘플 데이터에 대한 세부 정보를 많이 제공하지 않았다 T-SQL Pivot Operator

1

: 여기에 MSDN 문서입니다. 따라서 이것을 수행 할 PIVOT 함수의 샘플을 제공하겠습니다. 당신이 변환 런타임에서 열 목록을 얻을 것이다 변환하는 열 수 또는 동적 알고있는 경우

는 PIVOT 두 가지 옵션, 정적이있다.

편집 : 질문에 대한 변화를 바탕으로, 당신은 여전히 ​​

정적 피벗는 다음과 같이 것 PIVOT (Sql Fiddle sample)을 수행 할 수 있습니다 :

select * 
from 
(
    select * 
    from t 
) x 
pivot 
(
    max(value) 
    for variableid in([44], [45], [46], [47]) 
) p 

동적 피벗은 다음과 같습니다으로

( Sql Fiddle Sample) :

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(variableid) 
        from t 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

SELECT @colsAlias = STUFF((SELECT DISTINCT ',' + QUOTENAME(m.variableid) + ' AS ' + QUOTENAME('variable' + cast(n.variableid as varchar(10))) 
    FROM t m INNER JOIN t n ON m.variableid = n.variableid 
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'') 


set @query = 'SELECT documentid, revision, ' + @colsAlias + ' from 
      (
       select * 
       from t 
      ) x 
      pivot 
      (
       max(value) 
       for variableid in (' + @cols + ') 
      ) p ' 

execute(@query) 
+0

감사합니다. 원래 게시물에 내 질문에 대한 새로운 설명을 게시했지만 데이터를 표로 작성할 수 없으므로 읽기 어려울 수 있습니다. – user1491749

+0

@ user1491749 내 편집을 참조하십시오. 원하는 형식으로 데이터를 가져 오기 위해 PIVOT을 사용할 수 있습니다. – Taryn

+0

감사합니다. 나는 동적 피벗을 시도했다. 다음과 같은 오류가 발생합니다. 이것은 탈출 문제입니까? 그렇다면 각각의 열을 어떻게 피할 수 있습니까? 메시지 105, 수준 15, 상태 1, 줄 1 'variable47'문자열 뒤에 닫히지 않은 인용 부호. 메시지 102, 수준 15, 상태 1, 줄 1 'variable47'근처의 구문이 잘못되었습니다. – user1491749