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

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

Linda Hamilton
Linda Hamilton원래의
2024-12-25 15:21:10679검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.