> 데이터 베이스 > MySQL 튜토리얼 > 집계 없이 SQL에서 행을 열로 동적으로 피벗하는 방법은 무엇입니까?

집계 없이 SQL에서 행을 열로 동적으로 피벗하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-08 00:51:42
원래의
149명이 탐색했습니다.

이 SQL 코드는 데이터 유형을 잃지 않고 행을 열로 동적으로 피벗하는데, 이는 종종 집계 함수가 필요한 기능입니다. 명확성과 가독성을 높이기 위해 다시 표현하겠습니다.

How to Dynamically Pivot Rows to Columns in SQL Without Aggregation?

SQL에서 행을 열로 동적으로 피벗: 유형 보존 솔루션

표준 SQL PIVOT 작업에는 일반적으로 집계 함수(예: MAX 또는 MIN)가 필요하며, 이로 인해 데이터 손실이나 유형 강제 변환이 발생할 수 있습니다. 이 예에서는 최대 12개의 테스트 이름을 처리하면서 원래 데이터 유형을 유지하면서 행을 열로 피벗하는 동적 SQL 접근 방식을 보여줍니다.

이 과제는 다양한 수의 테스트 이름(최대 12개)과 혼합 데이터 유형이 있는 테이블을 각 테스트 이름이 열이 되는 테이블로 변환하는 것입니다. 이러한 가변성을 수용하려면 동적 솔루션이 필요합니다.

동적 SQL 솔루션

이 솔루션은 동적 SQL을 교묘하게 사용하여 데이터 자체를 기반으로 피벗 쿼리를 구성합니다.

<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

SELECT @cols = STUFF((SELECT distinct ',' + QUOTENAME(TEST_NAME) 
                    FROM yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'');

SET @query = 'SELECT sbno,' + @cols + '
             FROM 
             (
                SELECT test_name, sbno, val
                FROM yourtable
             ) x
             PIVOT 
             (
                MAX(val)
                FOR test_name IN (' + @cols + ')
             ) p;';

EXECUTE(@query);</code>
로그인 후 복사

코드는 먼저 고유한 @cols 값에서 쉼표로 구분된 열 이름(TEST_NAME) 목록을 작성합니다. 그런 다음 PIVOT을 집계 함수로 사용하여 @query 쿼리(MAX(val))를 구성합니다. MAX을 사용하는 동안 각 SBNO 내에서 고유한 값을 피봇팅하므로 원본 데이터가 효과적으로 보존됩니다. 마지막으로 생성된 쿼리가 실행됩니다.

출력 예시

출력 테이블에는 원래 데이터 유형을 유지하면서 원래 테이블의 해당 값으로 채워지는 각 고유 테스트 이름에 대한 열이 있습니다.

<code>| SBNO | TEST1 | TEST2 |  TEST3 |
---------------------------------
|    1 | 0.304 |   2.3 |   PASS |
|    2 |  0.31 |   2.5 |   PASS |
|    3 | 0.306 |   2.4 | (null) |</code>
로그인 후 복사

이 방법은 다양한 수의 테스트 이름과 다양한 데이터 유형을 효율적으로 처리하여 SQL의 동적 피버팅을 위한 강력한 솔루션을 제공합니다. yourtable을 테이블의 실제 이름으로 바꿔야 합니다.

위 내용은 집계 없이 SQL에서 행을 열로 동적으로 피벗하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿