고수님들 쿼리짜고 있는데 감이 잡히지 않아서 질문이 있습니다. 1

by 멜로 [Oracle 기초] [2023.12.21 17:49:24]


안녕하세요. 사수한테 요청을 받아서 쿼리를 짜고 있는데, 감이 도무지 잡히지 않아 질문드립니다 ㅠㅠ

사실 사수도 쿼리가 좀 어렵고 난해할 것 같아서 제가 못짜도 된다고 하셨는데, 그래도 해보고 싶어서 작성을 해보고 있거든요.

예를 들어서 TEMP라는 테이블에 아래와 같이 데이터가 있습니다.

파라미터 컬럼명
A C1 4
A C2 5
A-01 C3 6
A-02 C3 7
A-03 C3 8

위와 같이 A라는 데이터와 A에서 파생된 A-01, A-02, A-03 이라는 데이터가 있습니다.(이들의 파생관계는 다른 테이블을 통해서 알 수 있습니다.)  

또, 컬럼명을 의미하는 컬럼과 값을 의미하는 컬럼이 있는데요.

 

제가 출력하고자 하는 형식은

  C1 C2 C3
A-01 4 5 6
A-02 4 5 7
A-03 4 5 8

이런 식으로 출력이 되어야 하는데, 가능한지가 궁금합니다.. 

C1과 C2는 A-01 ~ A-03의 상위인 A가 가지고 있는 데이터로, 같은 값을 가지게 되고 C3부터는 각 ROW별로 가지는 개별 데이터입니다.(A-01 ~ A-03은 무조건 같은 컬럼을 가지게 됩니다.)

C1, C2컬럼이 없을 때는 PIVOT을 사용해서 컬럼으로 출력을 했었는데요. 같은 값을 가지는 컬럼(C1, C2)이 들어와버리니 어떻게 해야하는지, 이게 가능한지 궁금합니다 ㅠ

by 마농 [2023.12.21 17:58:43]

관계가 정의되어 있는 테이블도 보여주세요.
케이스에 따라 결과가 달라질 수 있다면 다른 케이스 예제도 보여주세요.
조회 조건이 주어진다면? 해당 사항도 설명해 주세요.


by 멜로 [2023.12.22 08:49:56]

답변 감사합니다!

관계 정의된 테이블은 rel이라는 테이블이라고 할 때

PARAMETER MAIN_PARAMETER
A A
A-01 A
A-02 A
A-03 A

이런 식으로 상위에 있는 파라미터는 MAIN_PARAMETER와 PARAMETER가 동일하고, 하위인 파라미터는 상위 PARAMETER를 MAIN_PARAMETER로 가지게 됩니다.

조회 조건 같은 경우에는 상위 파라미터를 검색하든 하위 파라미터를 검색하든 본문의 예시와 같이 출력이 되는 것이 목표입니다.

만약 하위 파라미터가 한 개도 없는 C라는 파라미터를 검색하게 된다면 출력은 되지 않습니다. 


by 마농 [2023.12.22 08:15:55]

파라미터와 코드의 값을 정확하게 알고 있다고 가정했을 때 다음과 같이 풀 수는 있습니다.
다만 가변적으로 변할 수 있는 값이라고 한다면? 쿼리 한방에는 안됩니다.
동적쿼리를 이용하셔야 합니다.
 

WITH t AS
(
SELECT 'A' p, 'C1' c, 4 v FROM dual
UNION ALL SELECT 'A'   , 'C2', 5 FROM dual
UNION ALL SELECT 'A-01', 'C3', 6 FROM dual
UNION ALL SELECT 'A-02', 'C3', 7 FROM dual
UNION ALL SELECT 'A-03', 'C3', 8 FROM dual
)
SELECT b.p
     , a.c1
     , a.c2
     , b.v c3
  FROM (SELECT * FROM t WHERE p = 'A')
       PIVOT (MIN(v) FOR c IN ('C1' c1, 'C2' c2)) a
     , t b
 WHERE b.p LIKE 'A-%'
;

 

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