안녕하세요 쿼리를 뽑아야 할일이 생겼는데 방법이 생각나지 않아 혹시 아시는분이 계실까 해서 질문남겨요
테이블 컬럼 코드값으로 콤마로 구분된 정보가 있습니다.
select시 컬럼값을 서브쿼리로 in절에 넣어서 한글화해서 뽑고싶은데 가능할까요?
목적은 엑셀 익스포트 하려고합니다. 한컬럼에 안나와도 되구요 ㅠ
예) code_code 컬럼에는 "AA11,AA12,AA13"의 형태로 문자 데이터 타입으로 입력되어있습니다.
AA11,AA12,AA13 코드화된 값을 "아아1,아아2,아아3" 이런형태로 뽑아내고 싶습니다.
단순 서브쿼리로 안될거 같긴 합니다.. 혹시 방법이 있긴 한걸까요?
select
ISNULL(selct code_name from CODE_TABLE WHERE code IN(code_code), code_code) AS code_name
from MY_TABLE
감사합니다.
SQLServer 2017 이상이라면 이런 식으로 풀 수 있습니다.
STRING_SPLIT()과 STRING_AGG() 용법을 살펴 보세요.
CREATE TABLE dbo.MY_TABLE ( id int NOT NULL IDENTITY PRIMARY KEY, col1 nvarchar(10) NOT NULL, code_code varchar(50) NOT NULL ); CREATE TABLE dbo.CODE_TABLE ( code_code varchar(10) NOT NULL PRIMARY KEY, code_name nvarchar(10) NOT NULL ); INSERT dbo.MY_TABLE (col1, code_code) VALUES (N'홍길동', 'AA11,AA12,AA13'), (N'심청', 'AA12,AA13'); INSERT dbo.CODE_TABLE (code_code, code_name) VALUES ('AA11', N'아아1'), ('AA12', N'아아2'), ('AA13', N'아아3');
WITH A AS ( SELECT MT.id, STRING_AGG(CT.code_name, ',') AS code_name FROM MY_TABLE MT CROSS APPLY STRING_SPLIT(MT.code_code, ',') SS INNER JOIN CODE_TABLE CT ON CT.code_code = SS.value GROUP BY MT.id ) SELECT MT.id, MT.col1, A.code_name FROM MY_TABLE MT INNER JOIN A ON A.id = MT.id;
WITH code_table AS ( SELECT 'AA11' code, '아아1' code_name UNION ALL SELECT 'AA12', '아아2' UNION ALL SELECT 'AA13', '아아3' ) , my_table AS ( SELECT 'AA11,AA12,AA13' code_code UNION ALL SELECT 'AA11,AA13' UNION ALL SELECT 'AA13,AA12' ) SELECT code_code , STUFF( (SELECT ',' + code_name FROM code_table WHERE CHARINDEX(code, a.code_code) > 0 ORDER BY CHARINDEX(code, a.code_code) FOR XML PATH('') ), 1, 1, '') code_name FROM my_table a ; -- http://gurubee.net/article/55512