2016-12-07 8 views
0

안녕이 나는에 피벗 기능을 사용하고 싶은 다음 표 :피벗 : 수평 데이터에 수직

Id|Number| Code 
1 | 34 |abc12345 
1 | 23 |xqwe6758 
2 | 37 |ghut564hg 
3 | 456 |ghut8695 
3 | 39 |ghtuj678 
3 | 22 |fsdifje12 

그리고 그것은 다음과 같은 수평으로 표시 할 :

Id| Code1 | Code2 | Code3 
1 | abc12345 | xqwe6758 | null 
2 |ghut564hg | null  | null 
3 |ghut8695 | ghtuj678 | fsdifje12 


SELECT Id 
     ,[Code1] 
     ,[Code2] 
     ,[Code3] 
    FROM(SELECT Id,Code 
     FROM [TableName] 
)d 
    pivot(
    max(Id) 
    for Code in([Code1],[Code2],[Code3]) 
)as piv; 

Id 열에 잘못된 열 이름 오류가 발생합니다. 누군가가 오류를 식별하는 데 도움이 될 수 있습니까?

+0

@DanielCorzo : 나는 코드 열에 매우 임의의 값을 가지고 있기 때문에, 내가 링크에서 언급 "케이스"값을 하드 코드 싶지 않아요. 해결 방법이 있을까요? – user7221204

+0

최대 3 개의 코드에 제한이 있습니까? – Shnugo

+0

@Shnugo : 예 Id 당 최대 3 개의 코드가 있습니다. – user7221204

답변

2

아래로 피벗을 사용할 수 있습니다

당신이 열 목록을 만든 다음 열을 변화와 함께 실행하는 동적 SQL을 사용하는 물건을 사용할 수있는 다양한 컬럼에 대한
;with cte as 
(
    select 
     id, code, 
     RowN = Row_Number() over (partition by id order by code) 
    from 
     yourtable1 
) 
select * 
from cte 
pivot (max(code) for RowN in([1], [2], [3])) p 

...하지만 다양한 예제에서 사용할 수 있습니다

enter image description here

+0

ID 번호 1에 대해 하나의 행 대신 코드 2를 다른 행에 코드 2로 나눕니다. – user7221204

+0

이것이 필요한 출력 예료입니까? 필요한 출력물을 명확하게 설명해 주시겠습니까? –

+0

같은 줄은 서로 다른 열이있는 동일한 행을 의미합니까? 이것이이 쿼리가 제공하는 것입니다 –

0

을 시도해보십시오 SO 자체 ...

내 출력 추가
DECLARE @tbl TABLE(Id INT, Code VARCHAR(100)); 
INSERT INTO @tbl VALUES 
(1,'abc12345') 
,(1,'xqwe6758') 
,(2,'ghut564hg') 
,(3,'ghut8695') 
,(3,'ghtuj678') 
,(3,'fsdifje12'); 

SELECT p.* 
FROM 
(
    SELECT Id 
      ,'Code' + CAST(ROW_NUMBER() OVER(PARTITION BY Id ORDER BY Code) AS VARCHAR(10)) AS ColumnName 
      ,Code 
    FROM @tbl 
) AS t 
PIVOT 
(
    MAX(Code) FOR ColumnName IN(Code1,Code2,Code3 /*add as many as you need*/) 
) AS p 

결과

Id Code1  Code2  Code3 
1 abc12345 xqwe6758 NULL 
2 ghut564hg NULL  NULL 
3 fsdifje12 ghtuj678 ghut8695