이 SQL 코드는 데이터 유형을 잃지 않고 행을 열로 동적으로 피벗하는데, 이는 종종 집계 함수가 필요한 기능입니다. 명확성과 가독성을 높이기 위해 다시 표현하겠습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!