여러개의 컬럼값 하나로 보여주기 0 2 542

by xcrew [SQL Query] [2022.02.25 09:25:18]


안녕하세요.

여러개의 컬럼을 하나로 보여주려고 하는데요

아래 type_cd는 각각의 코드로 구성되어 있습니다.

cd type_cd ststus
1 100001|100002|100003|100004 active
2 100001|100003|100002 active

각각의 코드의 이름만 하나로 가지고 오려고 쿼리를 작성하였는데요......

type_cd의 들어가 있는 코드가 여러개 일수도 있고 하나만 들어가 있을수도 있어서요.

100001
100001|100003|100005 

100001|100003|100005|100007

SELECT 
a.*
, CONCAT(code1, ',', code2, ',', code3, ',', code4) AS result
FROM (
SELECT
	cd
	, (SELECT c.name FROM codes c WHERE c.code_cd = SUBSTRING_INDEX(SUBSTRING_INDEX(type_cd, '|', 1), '|', -1)) AS code1
	, (SELECT c.name FROM codes c WHERE c.code_cd = SUBSTRING_INDEX(SUBSTRING_INDEX(type_cd, '|', 2), '|', -1)) AS code2
	, (SELECT c.name FROM codes c WHERE c.code_cd = SUBSTRING_INDEX(SUBSTRING_INDEX(type_cd, '|', 3), '|', -1)) AS code3
	, (SELECT c.name FROM codes c WHERE c.code_cd = IFNULL(SUBSTRING_INDEX(SUBSTRING_INDEX(type_cd, '|', 4), '|', -1), '') ) AS code4
FROM
coupons) a;

 

제가 원하는 데이터 형태 입니다.

도움 부탁드립니다.

cd type_cd status result
1 100001|100002|100003|100004 active A,B,C,D
2 100001|100003|100002 active A,C,B
3 100001|100002 active A,B
4 100001|100002|100003|100004|100005 active A,B,C,D,E
by 마농 [2022.02.25 11:02:53]
-- MySQL, MariaDB --
WITH coupons AS
(
SELECT 1 cd, '100001|100002|100003|100004' type_cd, 'active' status
UNION ALL SELECT 2, '100001|100003|100002'              , 'active'
UNION ALL SELECT 3, '100001|100002'                     , 'active'
UNION ALL SELECT 4, '100001|100002|100003|100004|100005', 'active'
)
, codes AS
(
SELECT '100001' code_cd, 'A' name
UNION ALL SELECT '100002', 'B'
UNION ALL SELECT '100003', 'C'
UNION ALL SELECT '100004', 'D'
UNION ALL SELECT '100005', 'E'
)
SELECT a.cd, a.type_cd, a.status
     , GROUP_CONCAT(c.name ORDER BY INSTR(a.type_cd, c.code_cd)) result
  FROM coupons a
 INNER JOIN codes c
    ON INSTR(a.type_cd, c.code_cd) > 0
 WHERE a.status = 'active'
 GROUP BY a.cd, a.type_cd, a.status
;

 


by xcrew [2022.02.28 15:35:52]

정말 감사드립니다~!!^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입