안녕하세요.
여러개의 컬럼을 하나로 보여주려고 하는데요
아래 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
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | -- 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 ; |