안녕하세요.
여러개의 컬럼을 하나로 보여주려고 하는데요
아래 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 |
-- 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 ;