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