database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 7301 게시물 읽기
No. 7301
텍스트 동적 조합 문의
작성자
초개(k62511)
작성일
2023-12-06 11:10ⓒ
2023-12-06 14:05ⓜ
조회수
223

WITH TBL AS (

SELECT  'AAA' AS test_cd , 'Y' AS grp_flg, 'Y' AS inc_flg 

UNION ALL

SELECT  'BBB' AS test_cd , 'N' AS grp_flg, 'Y' AS inc_flg

UNION ALL

SELECT  'CCC' AS test_cd , 'N' AS grp_flg, 'Y' AS inc_flg

UNION ALL

SELECT  'DDD' AS test_cd , 'N' AS grp_flg, 'N' AS inc_flg

UNION ALL

SELECT  'EEE' AS test_cd , 'N' AS grp_flg, 'N' AS inc_flg

UNION ALL

SELECT  'FFF' AS test_cd , 'N' AS grp_flg, 'N' AS inc_flg

UNION ALL

SELECT  'ABC' AS test_cd , 'N' AS grp_flg, 'Y' AS inc_flg

UNION ALL

SELECT  'ADA' AS test_cd , 'N' AS grp_flg, 'N' AS inc_flg

UNION ALL

SELECT  'BCD' AS test_cd , 'N' AS grp_flg, 'N' AS inc_flg

UNION ALL

SELECT  'CDF' AS test_cd , 'N' AS grp_flg, 'N' AS inc_flg

UNION ALL

SELECT  'EFG' AS test_cd , 'N' AS grp_flg, 'N' AS inc_flg

),

RST AS (

SELECT   STUFF((

             SELECT  ',' + b.test_cd

             FROM    TBL b 

             WHERE   b.grp_flg = 'Y' AND b.inc_flg = 'Y'

             FOR XML PATH('')),1,1,'') AS grp_cd

        , STUFF((

             SELECT  ',' + b.test_cd 

             FROM    TBL b 

             WHERE   b.grp_flg = 'N' AND b.inc_flg = 'Y'

             FOR XML PATH('') ),1,1,'') AS inc_cd

        , STUFF((

             SELECT ',' + b.test_cd

             FROM    TBL b 

             WHERE   (b.grp_flg = 'Y'OR b.inc_flg = 'Y')

             FOR XML PATH('')),1,1,'') AS grp_inc_list

        , STUFF((

             SELECT  ',' + b.test_cd

             FROM    TBL b 

             WHERE   b.grp_flg = 'N' AND b.inc_flg = 'N'

             AND     b.test_cd NOT IN ('AAA','BBB','CCC','DDD','EEE','FFF')

             FOR XML PATH('') ),1,1,'') AS oth_cd_list 

FROM TBL a )

SELECT R.*

FROM RST R


샘플 데이터 조회결과

grp_cd|inc_cd|grp_inc_list|oth_cd

AAA|BBB,CCC|AAA,BBB,CCC|ABC,ADA,BCD,CDF,EFG

AAA|BBB,CCC|AAA,BBB,CCC|ABC,ADA,BCD,CDF,EFG

AAA|BBB,CCC|AAA,BBB,CCC|ABC,ADA,BCD,CDF,EFG

AAA|BBB,CCC|AAA,BBB,CCC|ABC,ADA,BCD,CDF,EFG

AAA|BBB,CCC|AAA,BBB,CCC|ABC,ADA,BCD,CDF,EFG

AAA|BBB,CCC|AAA,BBB,CCC|ABC,ADA,BCD,CDF,EFG

AAA|BBB,CCC|AAA,BBB,CCC|ABC,ADA,BCD,CDF,EFG

AAA|BBB,CCC|AAA,BBB,CCC|ABC,ADA,BCD,CDF,EFG

AAA|BBB,CCC|AAA,BBB,CCC|ABC,ADA,BCD,CDF,EFG

AAA|BBB,CCC|AAA,BBB,CCC|ABC,ADA,BCD,CDF,EFG

AAA|BBB,CCC|AAA,BBB,CCC|ABC,ADA,BCD,CDF,EFG

1. grp_cd - grp_flg가 Y인 코드

2. inc_cd - inc_flg가 Y인 코드

3. grp_inc_list - grp_cd와 inc_cd값을 합쳐놓은 코드

4. oth_cd - 그외의 코드


코드 설명

1. grp_flg가 Y인값이 대표 코드 - 1개만 Y로 지정가능 grp_flg가 Y인코드는 inc_flg도 Y

2. inc_flg가 Y인값들은 grp_flg가 Y인 값과 함께 보여줄 포함코드 다수 지정 가능


문의내용


위 샘플 데이터 기준으로 아래와같이 출력을 하고싶습니다.


1. 'AAA','BBB','CCC','DDD','EEE','FFF' 중에 grp_flg가 Y이며 inc_flg가 Y가 있을 경우

 

컬럼 : AAA_CD|BBB_CD|CCC_CD|DDD_CD|EEE_CD|FFF_CD|OTH_CD

 

데이터 : AAA,BBB,CCC,ABC|||DDD|EEE|FFF|ABC,ADA,BCD,CDF,EFG

 

2. 'AAA','BBB','CCC','DDD','EEE','FFF' 중에 grp_flg가 Y지만 inc_flg가 N일 경우

 

 

컬럼 : AAA_CD|BBB_CD|CCC_CD|DDD_CD|EEE_CD|FFF_CD|OTH_CD

 

데이터 : AAA,ABC|BBB|CCC|DDD|EEE|FFF|ABC,ADA,BCD,CDF,EFG

 

3. 'AAA','BBB','CCC','DDD','EEE','FFF'중에 grp_flg가 Y인 코드가 없을경우

 

 

컬럼 : AAA_CD|BBB_CD|CCC_CD|DDD_CD|EEE_CD|FFF_CD|OTH_CD

 

데이터 : AAA|BBB|CCC|DDD|EEE|FFF|ABC,ABC,ADA,BCD,CDF,EFG


1, 2, 3의 경우의수로 동적으로 조합하도록 만들고싶습니다..

grp_flg와 inc_flg의 Y/N 여부에 따라 텍스트를 동적으로 변경시키고 싶습니다. 

어떻게해야할지 감이안오네요

이 글에 대한 댓글이 총 5건 있습니다.

WITH TBL AS ( 

......


SELECT

GRP_FLG, INC_FLG, STRING_AGG(test_cd, ',')

FROM TBL

GROUP BY

GRP_FLG, INC_FLG

..님이 2023-12-06 12:29에 작성한 댓글입니다. Edit

..님 답변감사합니다.

제가 설명이 좀 부족했나봐요

원하는 출력형태는

1번의 경우

AAA_CD|BBB_CD|CCC_CD|DDD_CD|EEE_CD|FFF_CD|OTH_CD

AAA,BBB,CCC,ABC|||DDD|EEE|FFF|ABC,ADA,BCD,CDF,EFG

2번의 경우

AAA_CD|BBB_CD|CCC_CD|DDD_CD|EEE_CD|FFF_CD|OTH_CD

AAA,ABC|BBB|CCC|DDD|EEE|FFF|ABC,ADA,BCD,CDF,EFG

3번의경우

AAA_CD|BBB_CD|CCC_CD|DDD_CD|EEE_CD|FFF_CD|OTH_CD

AAA|BBB|CCC|DDD|EEE|FFF|ABC,ABC,ADA,BCD,CDF,EFG


이런식으로 출력을 하고싶었던거라서요 ㅠㅠ

초개(k62511)님이 2023-12-06 14:01에 작성한 댓글입니다.
이 댓글은 2023-12-06 14:03에 마지막으로 수정되었습니다.

질문이 이해하기 어렵네요.

원본 대비 결과표를 보여주시는 게 좋습니다.

원본이 달라지면 결과도 달라진다는 건가요?

아니면 원본은 하나인데 결과가 여러가지라는건가요?

마농(manon94)님이 2023-12-06 20:30에 작성한 댓글입니다.

안녕하세요 마농님

원본 데이터인 TBL의 데이터가 지속적으로 변경될수 있습니다.

원본 데이터가 변경됨에 따라 출력되어야하는 경우의 수가 1,2,3 3가지의 케이스로 나올수 있다는 말이었습니다. ㅠㅠ


조회 결과의 헤더는 아래와같이 7가지가 나와야하고

AAA_CD|BBB_CD|CCC_CD|DDD_CD|EEE_CD|FFF_CD|OTH_CD


조회된 데이터는 1,2,3 경우의수와 같이 기준이되는 6개의 코드값과 grp_flg, inc_flg 값에 따라 test_cd값이 조합되어 한row로 출력되게 하려고 합니다.


원본데이터에 6가지 기본코드값이 있을수도 없을수도 있습니다.

초개(k62511)님이 2023-12-08 15:52에 작성한 댓글입니다.
이 댓글은 2023-12-08 16:34에 마지막으로 수정되었습니다.

케이스별로 원본 대비 결과표 보여주시면 좋을 듯 하네요.

마농(manon94)님이 2023-12-11 11:02에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7304두 테이블 조회값을 한 쿼리 결과값으로 조합 문의 [2]
초개
2024-03-13
113
7303문자열 구분 [2]
초보
2024-01-05
196
7301텍스트 동적 조합 문의 [5]
초개
2023-12-06
223
7299프로시져 성능 문제
나그네
2023-06-30
397
7298시간으로 데이터 형 변환 시 문제 [2]
시간 타입 문제
2023-06-26
400
7297대용량 데이터 조회 관련 성능 이슈
도와주세요..
2023-06-22
360
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다