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