oracle 행을 새로운 열로 바꾸는 방법 0 3 4,457

by 수달 [2024.04.01 17:35:29]


캡처.JPG (64,318Bytes)

사진과 같이, 한 컬럼의 특정 값(설문항목 컬럼 내 A, B, C)을 새로운 열로 생성하여 응답값을 나타내고 싶습니다.

A, B, C 각각 추출한 쿼리를 WITH절로 묶은 다음, 조인하는 방법 밖에 찾지 못했는데 그러다보니 너어무 쿼리 돌리는데 오래 걸리더라구요ㅠㅠ

혹시 좋은 방법 있을지 문의 드립니다.

by 마농 [2024.04.01 18:17:10]
WITH t AS
(
SELECT 1 id, 'A' q, 5 a FROM dual
UNION ALL SELECT 1, 'B', 6 FROM dual
UNION ALL SELECT 1, 'C', 7 FROM dual
UNION ALL SELECT 1, 'D', 1 FROM dual
UNION ALL SELECT 1, 'E', 5 FROM dual
UNION ALL SELECT 1, 'F', 9 FROM dual
UNION ALL SELECT 1, 'G', 8 FROM dual
UNION ALL SELECT 1, 'H', 2 FROM dual
UNION ALL SELECT 1, 'I', 1 FROM dual
UNION ALL SELECT 1, 'J', 2 FROM dual
UNION ALL SELECT 2, 'A', 8 FROM dual
UNION ALL SELECT 2, 'B', 2 FROM dual
UNION ALL SELECT 2, 'C', 3 FROM dual
UNION ALL SELECT 2, 'D', 2 FROM dual
UNION ALL SELECT 2, 'E', 1 FROM dual
UNION ALL SELECT 2, 'F', 8 FROM dual
UNION ALL SELECT 2, 'G', 2 FROM dual
UNION ALL SELECT 2, 'H', 9 FROM dual
UNION ALL SELECT 2, 'I', 1 FROM dual
UNION ALL SELECT 2, 'J', 5 FROM dual
UNION ALL SELECT 3, 'A', 8 FROM dual
UNION ALL SELECT 3, 'B', 7 FROM dual
UNION ALL SELECT 3, 'C', 1 FROM dual
UNION ALL SELECT 3, 'D', 9 FROM dual
UNION ALL SELECT 3, 'E', 3 FROM dual
UNION ALL SELECT 3, 'F', 7 FROM dual
UNION ALL SELECT 3, 'G', 5 FROM dual
UNION ALL SELECT 3, 'H', 8 FROM dual
UNION ALL SELECT 3, 'I', 6 FROM dual
UNION ALL SELECT 3, 'J', 1 FROM dual
)
-- 1. Group By ~ Min(Decode())
SELECT id
     , MIN(DECODE(q, 'A', a)) a
     , MIN(DECODE(q, 'B', a)) b
     , MIN(DECODE(q, 'C', a)) c
  FROM t
 WHERE q IN ('A', 'B', 'C')
 GROUP BY id
;

-- 2. PIVOT
SELECT *
  FROM t
 PIVOT (MIN(a) FOR q IN ('A' a, 'B' b, 'C' c))
;

 


by 수달 [2024.04.02 09:54:53]

와 감사합니다! 혹시 MIN을 쓰는 이유를 알 수 있을까요?(MAX나 SUM이 아닌)


by 마농 [2024.04.02 10:13:14]

어차피 조건에 해당하는 것은 1건 뿐이므로 MIN/MAX 뭘 쓰든 상관 없습니다.
SUM, AVG 등은 숫자인 경우에는?가능하긴 합니다만...
이 경우에는 수치계산이 아니므로 그냥 MIN/MAX 가 적당합니다.

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