집 >데이터 베이스 >MySQL 튜토리얼 >집계 없이 SQL에서 동적 피벗을 수행하는 방법은 무엇입니까?
동적 피벗: 행을 열로 교묘하게 변환합니다.
동적 SQL 문은 유연한 쿼리를 생성하기 위한 강력한 도구입니다. 이 문서에서는 집계 함수를 사용하지 않고 행을 열로 변환하는 방법에 중점을 둡니다.
동적 관점의 이해
피벗 연산은 일반적으로 SUM 또는 MAX와 같은 집계 함수를 사용합니다. 그러나 어떤 경우에는 가치 관점을 직접적으로 얻는 것이 바람직할 수도 있습니다. 이를 위해서는 약간 다른 접근 방식이 필요합니다.
예를 들어 다음 소스 테이블을 고려해 보세요.
<code>╔═══════════╦══════╦═══════╗ ║ TEST_NAME ║ SBNO ║ VAL ║ ╠═══════════╬══════╬═══════╣ ║ Test1 ║ 1 ║ 0.304 ║ ║ Test1 ║ 2 ║ 0.31 ║ ║ Test1 ║ 3 ║ 0.306 ║ ║ Test2 ║ 1 ║ 2.3 ║ ║ Test2 ║ 2 ║ 2.5 ║ ║ Test2 ║ 3 ║ 2.4 ║ ║ Test3 ║ 1 ║ PASS ║ ║ Test3 ║ 2 ║ PASS ║ ╚═══════════╩══════╩═══════╝</code>
원하는 출력은 다음과 유사한 피벗 테이블입니다.
<code>╔══════════════════════════╗ ║ SBNO Test1 Test2 Test3 ║ ╠══════════════════════════╣ ║ 1 0.304 2.3 PASS ║ ║ 2 0.31 2.5 PASS ║ ║ 3 0.306 2.4 NULL ║ ╚══════════════════════════╝</code>
집계 기능이 없는 동적 피버팅
집계 함수를 사용하지 않고 이 결과를 얻으려면 PIVOT 함수를 활용할 수 있습니다. VAL 열에는 varchar 데이터가 포함되어 있으므로 MAX 집계 함수를 활용할 수 있습니다.
하드코딩된 관점
제한된 수의 테스트에 대해 다음과 같이 열 이름을 하드코딩할 수 있습니다.
<code class="language-sql">select sbno, Test1, Test2, Test3 from ( select test_name, sbno, val from yourtable ) d pivot ( max(val) for test_name in (Test1, Test2, Test3) ) piv;</code>
확장 가능한 동적 관점
대량 테스트의 경우 동적 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>
두 방법 모두 원하는 결과가 동일하게 생성됩니다. 이 예에서는 동적 SQL을 활용하여 복잡한 데이터 처리 작업을 해결하기 위한 유연하고 효율적인 솔루션을 만드는 방법을 보여줍니다.
위 내용은 집계 없이 SQL에서 동적 피벗을 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!