문제:
데이터가 다음과 같은 상황에 직면합니다. 일대다 관계를 보다 구조화되고 읽기 쉬운 방식으로 표현하려고 합니다. 특히 고유 ID와 쉼표로 구분된 값 목록이 포함된 열이 있는 테이블을 각 고유 값이 별도의 열에 표시되는 테이블로 변환하려고 합니다.
Informix SQL 솔루션:
Informix SQL에서 권장되는 접근 방식은 사용자 정의 집계 함수를 활용하는 것입니다. Informix는 기본적으로 group_concat() 함수를 제공하지 않지만 해당 기능을 모방하는 사용자 정의 집계를 생성할 수 있습니다.
사용자 정의 집계 생성:
다음 코드는 방법을 보여줍니다. 필요한 사용자 정의를 생성하려면 집계:
CREATE FUNCTION gc_init(dummy VARCHAR(255)) RETURNING LVARCHAR; RETURN ''; END FUNCTION; CREATE FUNCTION gc_iter(result LVARCHAR, value VARCHAR(255)) RETURNING LVARCHAR; IF result = '' THEN RETURN TRIM(value); ELSE RETURN result || ',' || TRIM(value); END IF; END FUNCTION; CREATE FUNCTION gc_comb(partial1 LVARCHAR, partial2 LVARCHAR) RETURNING LVARCHAR; IF partial1 IS NULL OR partial1 = '' THEN RETURN partial2; ELIF partial2 IS NULL OR partial2 = '' THEN RETURN partial1; ELSE RETURN partial1 || ',' || partial2; END IF; END FUNCTION; CREATE FUNCTION gc_fini(final LVARCHAR) RETURNING LVARCHAR; RETURN final; END FUNCTION; CREATE AGGREGATE group_concat WITH (INIT = gc_init, ITER = gc_iter, COMBINE = gc_comb, FINAL = gc_fini);
사용:
집계를 생성한 후에는 쿼리에서 이를 활용하여 원하는 변환을 얻을 수 있습니다.
SELECT id, group_concat(codes) FROM anonymous_table GROUP BY id;
예:
라는 이름의 예제 테이블을 고려해 보겠습니다. anonymous_table:
CREATE TEMP TABLE anonymous_table ( id INTEGER NOT NULL, codes CHAR(4) NOT NULL, PRIMARY KEY (id, codes) ); INSERT INTO anonymous_table VALUES(63592, 'PELL'); INSERT INTO anonymous_table VALUES(58640, 'SUBL'); INSERT INTO anonymous_table VALUES(58640, 'USBL'); INSERT INTO anonymous_table VALUES(73571, 'PELL'); INSERT INTO anonymous_table VALUES(73571, 'USBL'); INSERT INTO anonymous_table VALUES(73571, 'SUBL');
앞에서 언급한 쿼리를 이 테이블에 적용하면 다음과 같은 출력이 생성됩니다.
58640 SUBL,USBL 63592 PELL 73571 PELL,SUBL,USBL
이는 집계 함수가 각 고유 ID와 연관된 코드를 효과적으로 그룹화하고 연결하는 방법을 보여줍니다. , 데이터를 더욱 체계적으로 표현합니다.
위 내용은 Informix SQL에서 일대다 관계를 고유한 열로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!