>데이터 베이스 >MySQL 튜토리얼 >재귀 SQL을 사용하여 DB2에서 쉼표로 구분된 열의 ​​피벗을 해제하는 방법은 무엇입니까?

재귀 SQL을 사용하여 DB2에서 쉼표로 구분된 열의 ​​피벗을 해제하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-18 02:48:10156검색

How to Unpivot Comma-Separated Columns in DB2 Using Recursive SQL?

DB2에서 쉼표로 구분된 열을 피벗 해제

쉼표로 구분된 열이 있는 데이터를 저장하면 문제가 발생할 수 있습니다. 이 쿼리는 재귀 SQL 기술을 사용하여 DB2에서 이러한 데이터를 변환하는 방법을 보여줍니다.

초기 테이블을 고려하세요.

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

참고: 이 솔루션에서는 쉼표로 구분된 값의 수가 99를 초과하지 않는다고 가정합니다. lvl 조건을 조정하면 지원되는 값이 늘어날 수 있습니다.

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

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