> 데이터 베이스 > MySQL 튜토리얼 > 다양한 값을 사용하여 Oracle SQL에서 동적 피벗을 수행하는 방법은 무엇입니까?

다양한 값을 사용하여 Oracle SQL에서 동적 피벗을 수행하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-24 00:57:10
원래의
692명이 탐색했습니다.

How to Perform Dynamic Pivots in Oracle SQL with Varying Values?

Oracle SQL 동적 피벗 테이블: 값 변화에 대처

Oracle SQL에서 PIVOT 함수를 사용할 때 IN 문에서 동적 값을 처리하는 것은 까다로울 수 있습니다. 이 문서에서는 해결 방법을 제공합니다.

Oracle의 PIVOT에서는 일반적으로 IN 문에 정적 값 문자열을 사용해야 합니다. 예:

<code class="language-sql">... pivot (sum(A) for B in (X))  </code>
로그인 후 복사

그러나 B 값이 데이터베이스 열에 저장되고 정기적으로 업데이트되는 경우 문자열 X를 수동으로 업데이트하는 것은 실용적이지 않습니다.

이 문제를 해결하기 위해 IN 문자열을 생성한 다음 이를 PIVOT 쿼리에 사용하는 방법을 사용할 수 있습니다. 분석해 보겠습니다.

1단계: IN 문자열 작성

문자열을 생성하려면 다음과 같이 COLUMN NEW_VALUELISTAGG 함수를 사용합니다.

<code class="language-sql">COLUMN temp_in_statement new_value str_in_statement
SELECT DISTINCT 
    LISTAGG('''' || myLetter || ''' AS ' || myLetter,',')
        WITHIN GROUP (ORDER BY myLetter) AS temp_in_statement 
    FROM (SELECT DISTINCT myLetter FROM myTable);</code>
로그인 후 복사

이 쿼리는 다음과 유사한 문자열을 구성합니다.

<code>'A' AS A,'B' AS B,'C' AS C</code>
로그인 후 복사

2단계: PIVOT에서 문자열 사용

이제 PIVOT 쿼리에 다음 문자열을 추가할 수 있습니다.

<code class="language-sql">SELECT * FROM 
    (SELECT myNumber, myLetter, myValue FROM myTable)
    PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));</code>
로그인 후 복사

제한사항:

이 방법은 솔루션을 제공하지만 제한 사항이 있습니다. 연결 문자열의 최대 길이는 4000바이트입니다. 따라서 이 방법은 B의 값의 개수가 너무 많으면 적합하지 않을 수 있다.

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

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