집 >데이터 베이스 >MySQL 튜토리얼 >재귀 SQL을 사용하여 DB2에서 쉼표로 구분된 데이터의 피벗을 해제하는 방법은 무엇입니까?
DB2에서 쉼표로 구분된 데이터 피벗 해제
데이터베이스 설계에서 여러 참조를 쉼표로 구분된 단일 열에 저장하는 것은 현명하지 않습니다. 이러한 관행은 비효율성과 데이터 불일치를 초래할 수 있습니다. 그러나 이러한 데이터 구조를 가진 데이터베이스를 상속하여 이를 정규화된 형식으로 변환해야 하는 상황이 발생할 수 있습니다.
DB2에서 쉼표로 구분된 데이터를 피벗 해제하려면 재귀 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
이 쿼리는 쉼표로 구분된 콘텐츠를 개별 행으로 피벗 해제합니다. 재귀를 사용하여 꼬리(처리되지 않은 나머지 참조)를 반복하고 쉼표가 있고 수준(재귀 깊이)이 100 미만인 경우 새 행을 생성합니다.
참고: 이 쿼리는 테스트되지 않았으며 특정 환경에서 작동하려면 조정이 필요할 수 있습니다.
위 내용은 재귀 SQL을 사용하여 DB2에서 쉼표로 구분된 데이터의 피벗을 해제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!