"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > SQL에서 기둥과 행을 효율적으로 전환하는 방법은 무엇입니까?

SQL에서 기둥과 행을 효율적으로 전환하는 방법은 무엇입니까?

2025-03-25에 게시되었습니다
검색:852

How to Efficiently Transpose Columns and Rows in SQL?

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 &] 3 5 John ] 5 1 8 2
Green
eric 3
1
2

tim How to Efficiently Transpose Columns and Rows in SQL?

1

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3