2010-03-11 13 views
4

제가

Title   Name    Type 
------------------------------------------------ 
T1    A    Primary 
T1    B    Primary 
T2    B    Primary 
T2    C    Secondary 
T2    D    Secondary 

내가되도록 출력을 필요로 테이블을 가지고

Title   Primary   Secondary 
------------------------------------------------ 
T1    A, B    NULL/Blank 
T2    B    C, D 

[이름] 일본어 표의 열은 임의의 값을 가질 수있다 . 즉 나중에 E, F, G 등이있을 수 있습니다.

어떻게이 작업을 수행 할 수 있습니까?

답변

7

그러면 동적 SQL이 필요합니다.

DECLARE @collist nvarchar(max); 
SELECT @collist = STUFF((SELECT ', ' + quotename(Type) FROM YourTable GROUP BY Type FOR XML PATH('')), 1, 2, ''); 

DECLARE @qry nvarchar(max); 
SET @qry = N' 
SELECT Title, ' + @collist + ' 
FROM 
(
    SELECT t.Title, t.Type, (SELECT STUFF((SELECT '', '' + t2.Name FROM YourTable t2 WHERE t2.Title = t.Title AND t2.Type = t.Type ORDER BY t2.Name FOR XML PATH('''')),1,2,'''')) AS Names 
    FROM YourTable t 
    GROUP BY t.Type, t.Title 
) tg 
pivot (max(Names) for tg.Type in (' + @collist + ')) p 
'; 
exec sp_executesql @qry; 
:

DECLARE @collist nvarchar(max); 
SELECT @collist = STUFF((SELECT ', ' + quotename(Type) FROM YourTable GROUP BY Type FOR XML PATH('')), 1, 2, ''); 

지금 당신은 당신이 다음 사용하여이 같이 sp_executesql

을 실행 원하는 쿼리를 구축하기 위해 @collist 사용할 수 있습니다 열 목록을 생성하기 위해이 같은 것을 고려

+0

나는 PIVOT을 이해하기 시작했다. [Primary (기본)], [Primary (기본)], [Primary (기본)], [Secondary (보조)], [Secondary (보조)]로 출력 한 쿼리를 실행했습니다. 그러나 PIVOT을 원하는 출력에 어떻게 적용 할 수 있습니까? – stackoverflowuser

+0

제가 도움이 될 수 있기를 대비해서 전체 출력을 게시하십시오. –

+0

@Will : 내 의견의 출력은 Rob Farley의 답에서 언급 된 @collist를 실행 한 후 완료된 출력입니다. 그리고 질문에 언급 된 원하는 출력은 원하는 전체 출력입니다. 희망이 명확하게. – stackoverflowuser