> 데이터 베이스 > MySQL 튜토리얼 > Db2에서 쉼표로 구분된 값을 여러 행으로 피벗 해제하는 방법은 무엇입니까?

Db2에서 쉼표로 구분된 값을 여러 행으로 피벗 해제하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-25 15:21:10
원래의
672명이 탐색했습니다.

How to Unpivot Comma-Separated Values into Multiple Rows in Db2?

Db2에서 쉼표로 구분된 열을 여러 행으로 변환하는 방법

많은 애플리케이션에서는 데이터를 관계형 테이블 구조에 저장해야 합니다. 각 레코드는 고유한 엔터티와 해당 속성을 나타냅니다. 그러나 단일 열 내에서 쉼표로 구분된 형식과 같이 데이터가 다르게 구성되는 경우도 있습니다. 이러한 데이터를 관계형 구조로 변환하는 것은 어려울 수 있지만 Db2는 재귀 SQL을 사용하는 솔루션을 제공합니다.

테이블에 쉼표로 구분된 값이 있는 열이 포함된 예를 고려해 보겠습니다.

Id | FK_ID | Reference
-----------------------
1    2100   GI2, GI32
2    2344   GI56
로그인 후 복사

우리의 목표는 이 데이터를 여러 행이 있는 테이블로 변환하는 것입니다. 여기서 각 행은 고유한 항목을 나타냅니다. 참조:

Id | FK_ID | Reference
-----------------------
1    2100   GI2
2    2100   GI32
3    2344   GI56
로그인 후 복사

아래 재귀 SQL 쿼리는 이러한 변환을 수행합니다.

WITH unpivot (lvl, id, fk_ref, reference, tail) AS (
  SELECT 1, id, fk_ref,
         CASE WHEN LOCATE(',',reference) > 0
              THEN TRIM(LEFT(reference, LOCATE(',',reference)-1))
              ELSE TRIM(reference)
         END,
         CASE WHEN LOCATE(',',reference) > 0
              THEN SUBSTR(reference, LOCATE(',',reference)+1)
              ELSE ''
         END
  FROM yourtable
  UNION ALL
  SELECT lvl + 1, id, fk_ref,
         CASE WHEN LOCATE(',', tail) > 0
              THEN TRIM(LEFT(tail, LOCATE(',', tail)-1))
              ELSE TRIM(tail)
         END,
         CASE WHEN LOCATE(',', tail) > 0
              THEN SUBSTR(tail, LOCATE(',', tail)+1)
              ELSE ''
         END
  FROM unpivot
  WHERE lvl < 100 AND tail != '')
SELECT id, fk_ref, reference FROM unpivot
로그인 후 복사

이 쿼리는 피벗을 해제하고 쉼표로 구분된 값을 반복적으로 별도의 행으로 분할합니다. 결과는 원하는 형식의 관계형 테이블입니다. 참고: 쿼리는 테스트되지 않았으며 약간의 조정이 필요할 수 있습니다.

위 내용은 Db2에서 쉼표로 구분된 값을 여러 행으로 피벗 해제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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