SQL 순위와 열을 쉽게 변환하는 쉬운 방법
]SQL의 피벗 함수는 Row-and-Column 변환에 적합한 것처럼 보이지만 복잡성은 엄청나게 될 수 있습니다. 더 쉬운 방법으로 이것을 달성하려면 다음과 같은 대안을 고려하십시오.
Union All, Aggregate Functions 및 Case 문을 사용합니다
이 방법은 Union All을 사용하여 데이터를 확장 한 다음 Perspective :
SELECT name,
SUM(CASE WHEN color = 'Red' THEN value ELSE 0 END) AS Red,
SUM(CASE WHEN color = 'Green' THEN value ELSE 0 END) AS Green,
SUM(CASE WHEN color = 'Blue' THEN value ELSE 0 END) AS Blue
FROM
(
SELECT color, Paul AS value, 'Paul' AS name
FROM yourTable
UNION ALL
SELECT color, John AS value, 'John' AS name
FROM yourTable
UNION ALL
SELECT color, Tim AS value, 'Tim' AS name
FROM yourTable
UNION ALL
SELECT color, Eric AS value, 'Eric' AS name
FROM yourTable
) AS src
GROUP BY name
정적 해체 및 관점
]]]변환하려는 값을 알고 있다면 해체 및 관점에 하드 코드 값을 사용하십시오.
SELECT name, [Red], [Green], [Blue]
FROM
(
SELECT color, name, value
FROM yourTable
UNPIVOT
(
value FOR name IN (Paul, John, Tim, Eric)
) AS unpiv
) AS src
PIVOT
(
SUM(value)
FOR color IN ([Red], [Green], [Blue])
) AS piv
로
동적 관점
]알 수없는 열과 색상의 경우 동적 SQL을 사용하여 해체 및 관점 목록을 생성하십시오.
DECLARE @colsUnpivot AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@colsPivot AS NVARCHAR(MAX)
SELECT @colsUnpivot = STUFF((SELECT ',' QUOTENAME(C.name)
FROM sys.columns AS C
WHERE C.object_id = OBJECT_ID('yourtable') AND
C.name 'color'
FOR XML PATH('')), 1, 1, '')
SELECT @colsPivot = STUFF((SELECT ','
QUOTENAME(color)
FROM yourtable AS t
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '')
SET @query = 'SELECT name, ' @colsPivot '
FROM (
SELECT color, name, value
FROM yourtable
UNPIVOT
(
value FOR name IN (' @colsUnpivot ')
) AS unpiv
) AS src
PIVOT
(
SUM(value)
FOR color IN (' @colsPivot ')
) AS piv'
EXEC(@query)
세 가지 방법 모두 다음 결과를 생성합니다.
red | green | Green | |
---|---|---|---|
&] | eric | 3 | 3|
1 | John | ||
1 | 8 | 2 | 2 |
tim
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3