안녕하세요. 도움이 필요하여 문의 드립니다. 아래와 같은 데이터가 있습니다.
[그림1]과 같은 데이터를 [그림2]와 같이 '등록번호'을 기준으로 '우선코드' (우선코드 1부터 우선으로) 순으로
동일한 등록번호에 여러가지 진단코드가 있는 경우 옆으로 나열되었으면 합니다.
(지금은 임시로 등록번호를 100~105번까지 입력하였는데 실제 데이터는 1000개 이상의 등록번호가 있습니다.)
[그림1] 'N수데이터'
등록번호 | 생년월일 | 최소진단일자 | 진단코드 | 진단코드_코드명 | 우선코드 |
100 | 2019-06-09 | 2019-12-20 | DI004195 | Encephalitis(뇌염) | 1 |
101 | 2017-10-06 | 2019-09-04 | DI004195 | Encephalitis(뇌염) | 1 |
101 | 2017-10-06 | 2019-09-06 | DI048802 | Autoimmune encephalitis(자가면역 뇌염) | 2 |
102 | 2019-08-13 | 2019-12-30 | DI047543 | Ventriculitis(뇌실염) | 1 |
103 | 2004-04-07 | 2019-10-25 | DI048802 | Autoimmune encephalitis(자가면역 뇌염) | 2 |
104 | 2002-05-02 | 2019-11-13 | DI004188 | Acute disseminated encephalomyelitis(급성 파종성 뇌척수염) | 1 |
105 | 2006-03-19 | 2019-12-13 | DI004195 | Encephalitis(뇌염) | 1 |
105 | 2006-03-19 | 2019-12-13 | DI047862 | Anti-NMDA receptor encephalitis(항-NMDA 수용체 뇌염) | 2 |
105 | 2006-03-19 | 2019-12-13 | DI048802 | Autoimmune encephalitis(자가면역 뇌염) | 3 |
[그림2]
등록번호 | 생년월일 | 최소진단일자 | 진단코드 | 진단코드_코드명 | 우선코드 | 생년월일 | 최소진단일자 | 진단코드 | 진단코드_코드명 | 우선코드 | 생년월일 | 최소진단일자 | 진단코드 | 진단코드_코드명 | 우선코드 |
100 | 2019-06-09 | 2019-12-20 | DI004195 | Encephalitis(뇌염) | 1 | ||||||||||
101 | 2017-10-06 | 2019-09-04 | DI004195 | Encephalitis(뇌염) | 1 | 2017-10-06 | 2019-09-06 | DI048802 | Autoimmune encephalitis(자가면역 뇌염) | 2 | |||||
102 | 2019-08-13 | 2019-12-30 | DI047543 | Ventriculitis(뇌실염) | 1 | ||||||||||
103 | 2004-04-07 | 2019-10-25 | DI048802 | Autoimmune encephalitis(자가면역 뇌염) | 2 | ||||||||||
104 | 2002-05-02 | 2019-11-13 | DI004188 | Acute disseminated encephalomyelitis(급성 파종성 뇌척수염) | 1 | ||||||||||
105 | 2006-03-19 | 2019-12-13 | DI004195 | Encephalitis(뇌염) | 1 | 2006-03-19 | 2019-12-13 | DI047862 | Anti-NMDA receptor encephalitis(항-NMDA 수용체 뇌염) | 2 | 2006-03-19 | 2019-12-13 | DI048802 | Autoimmune encephalitis(자가면역 뇌염) | 3 |
일단 생각나는 대로 한번 끄적여 봅니다.
SELECT
A.등록번호
, A.생년월일
, A.최소진단일자
, A.진단코드
, A.진단코드_코드명
, A.우선코드
, B.생년월일
, B.최소진단일자
, B.진단코드
, B.진단코드_코드명
, B.우선코드
, C.생년월일
, C.최소진단일자
, C.진단코드
, C.진단코드_코드명
, C.우선코드
FROM MAIN_T A
LEFT OUTER JOIN MAIN_T B
ON A.등록번호 = B.등록번호
AND B.우선코드 = '2'
LEFT OUTER JOIN MAIN_T C
ON A.등록번호 = C.등록번호
AND C.우선코드 = '3'
WHERE A.우선코드 = '1'
;
같은 테이블을 3번 조회 하는거라 효율성이 좋진 않을 것 같습니다.
SELECT 등록번호, 생년월일 , MIN(CASE 우선코드 WHEN 1 THEN 최소진단일자 END) 최소진단일자_1 , MIN(CASE 우선코드 WHEN 1 THEN 진단코드 END) 진단코드_1 , MIN(CASE 우선코드 WHEN 1 THEN 진단코드_코드명 END) 진단코드_코드명_1 , MIN(CASE 우선코드 WHEN 2 THEN 최소진단일자 END) 최소진단일자_2 , MIN(CASE 우선코드 WHEN 2 THEN 진단코드 END) 진단코드_2 , MIN(CASE 우선코드 WHEN 2 THEN 진단코드_코드명 END) 진단코드_코드명_2 , MIN(CASE 우선코드 WHEN 3 THEN 최소진단일자 END) 최소진단일자_3 , MIN(CASE 우선코드 WHEN 3 THEN 진단코드 END) 진단코드_3 , MIN(CASE 우선코드 WHEN 3 THEN 진단코드_코드명 END) 진단코드_코드명_3 FROM N수데이터 GROUP BY 등록번호, 생년월일 ;
SELECT 등록번호, 생년월일 , MIN(CASE rn WHEN 1 THEN 우선코드 END) 우선코드_1 , MIN(CASE rn WHEN 1 THEN 최소진단일자 END) 최소진단일자_1 , MIN(CASE rn WHEN 1 THEN 진단코드 END) 진단코드_1 , MIN(CASE rn WHEN 1 THEN 진단코드_코드명 END) 진단코드_코드명_1 , MIN(CASE rn WHEN 2 THEN 우선코드 END) 우선코드_2 , MIN(CASE rn WHEN 2 THEN 최소진단일자 END) 최소진단일자_2 , MIN(CASE rn WHEN 2 THEN 진단코드 END) 진단코드_2 , MIN(CASE rn WHEN 2 THEN 진단코드_코드명 END) 진단코드_코드명_2 , MIN(CASE rn WHEN 3 THEN 우선코드 END) 우선코드_3 , MIN(CASE rn WHEN 3 THEN 최소진단일자 END) 최소진단일자_3 , MIN(CASE rn WHEN 3 THEN 진단코드 END) 진단코드_3 , MIN(CASE rn WHEN 3 THEN 진단코드_코드명 END) 진단코드_코드명_3 FROM (SELECT 등록번호, 생년월일 , 우선코드, 최소진단일자, 진단코드, 진단코드_코드명 , ROW_NUMBER() OVER(PARTITION BY 등록번호 ORDER BY 우선코드) rn FROM N수데이터 ) a GROUP BY 등록번호, 생년월일 ;
WITH T ( MAIN_NO, YYMMDD, DT, CD, CD_NM, SEQ ) AS (SELECT '100' ,'2019-06-09' ,'2019-12-20' ,'DI004195' ,'Encephalitis(뇌염)' ,1 FROM DUAL UNION ALL SELECT '101' ,'2017-10-06' ,'2019-09-04' ,'DI004195' ,'Encephalitis(뇌염)' ,1 FROM DUAL UNION ALL SELECT '101' ,'2017-10-06' ,'2019-09-06' ,'DI048802' ,'Autoimmune encephalitis(자가면역 뇌염)' ,2 FROM DUAL UNION ALL SELECT '102' ,'2019-08-13' ,'2019-12-30' ,'DI047543' ,'Ventriculitis(뇌실염)' ,1 FROM DUAL UNION ALL SELECT '103' ,'2004-04-07' ,'2019-10-25' ,'DI048802' ,'Autoimmune encephalitis(자가면역 뇌염)' ,2 FROM DUAL UNION ALL SELECT '104' ,'2002-05-02' ,'2019-11-13' ,'DI004188' ,'Acute disseminated encephalomyelitis(급성 파종성 뇌척수염)' ,1 FROM DUAL UNION ALL SELECT '105' ,'2006-03-19' ,'2019-12-13' ,'DI004195' ,'Encephalitis(뇌염)' ,1 FROM DUAL UNION ALL SELECT '105' ,'2006-03-19' ,'2019-12-13' ,'DI047862' ,'Anti-NMDA receptor encephalitis(항-NMDA 수용체 뇌염)' ,2 FROM DUAL UNION ALL SELECT '105' ,'2006-03-19' ,'2019-12-13' ,'DI048802' ,'Autoimmune encephalitis(자가면역 뇌염)' ,3 FROM DUAL) SELECT A.* ,B.YYMMDD ,B.DT ,B.CD ,B.CD_NM ,B.SEQ ,C.YYMMDD ,C.DT ,C.CD ,C.CD_NM ,C.SEQ FROM T A LEFT OUTER JOIN T B ON A.MAIN_NO = B.MAIN_NO AND B.SEQ = 2 LEFT OUTER JOIN T C ON A.MAIN_NO = C.MAIN_NO AND C.SEQ = 3 WHERE A.SEQ = 1