[MSSQL] rows to columns (PIVOT)
아래 형태의 rows 를 columns 로 변환하는 방법
주의) subquery 의 select column에 따라서 최종 row수가 변할 수 있으니 사용하지 않더라도 subquery에서는 결과 row를 구분 할 수 있는 column(like pk)을 포함시켜야 함
TABLE2
Identifier | Content
Identifier_Name1 | blabla
Identifier_Name2 | blablabla
Identifier_Name3 | blablabla..
SELECT P.[Identifier_Name1], P.[Identifier_Name2], P.[Identifier_Name3]
FROM (
SELECT [PK_NAME], [Identifier], [Content]
FROM [TABLE2]
WHERE [TABLE2].[COLUMN] = ?
) A
PIVOT (
MAX(A.[Content]) FOR A.[Identifier] IN (
[Identifier_Name1],
[Identifier_Name2],
[Identifier_Name3]
)
) P
다른 table과 join 하여 하나의 row로 표시하는 법
SELECT P.[TABLE1_COLUMN], P.[Identifier_Name1], P.[Identifier_Name2], P.[Identifier_Name3]
FROM (
SELECT
[TABLE1].[KEY],
[TABLE1].[COLUMN],
[TABLE2].[Identifier], [TABLE2].[Content]
FROM [TABLE1]
LEFT JOIN [TABLE2] ON [TABLE1].[KEY] = [TABLE2].[KEY]
WHERE [TABLE1].[COLUMN] = ?
) A
PIVOT (
MAX(A.[Content]) FOR A.[Identifier] IN (
[Identifier_Name1],
[Identifier_Name2],
[Identifier_Name3]
)
) P