안녕하세요. 고수님들께 질문하나 드립니다.
오라클 에서는 JAVA 단에서 넘긴 내용을 기반으로 쿼리 수행 후, 컬럼이 동적으로 늘어나게 구현되어 있는데,
전환된 postgresql에서는 고정된 컬럼 내용으로 출력되도록 하였습니다.
오라클에서는 pivot 기능이 있어서, 소스코드 예시 항목 중 $pp$ 이라는 변수에
'0010' AS Q1, '0020' AS Q2 문자열이 삽입되면 14개 컬럼의 결과물이 나오고
'0010' AS Q1, '0020' AS Q2, '0040' AS Q3, '0050' AS Q4 문자열이 삽입되면 16개 컬럼의 결과물이 나오는
방식으로 동적으로 구현한 상태입니다.
사용자의 데이터 입력값에 따라서, 출력 데이터의 컬럼 개수가 결정되는 쿼리라서 소스코드단에서 표시되는 컬럼 리스트를 문자열
변수 형태로 넘기면 그 내용에 따라 데이터 값이 출력되는 쿼리가 필요합니다.
어떤 방법으로 하면 좋을까요?
--------------- 소스코드 예시 --------------
PIVOT
(
MIN (tt)
FOR aa IN ( $pp$ )
)
--------------- 실제 동작 쿼리 에시 --------------
PIVOT (MIN (tt)
FOR aa
IN ('0010' AS Q1,
'0020' AS Q2,
'0040' AS Q3,
'0050' AS Q4,
(중략)
'abc' AS Q32,
'abc1' AS Q33,
'abc2' AS Q34
)
)
이런 식으로 동작을 합니다.
그런데 위 쿼리를 postgresql 형식으로 아래와 같이 전환을 하였습니다.
------------------오라클 pivot를 postgreSQL로 전환 예시 -----------
select
(중략)
min(case when aa= '0010' THEN tt END) AS Q1,
min(case when aa='0020' THEN tt END) AS Q2,
min(case when aa ='0040' THEN tt END) AS Q3,
min(case when aa ='0050' THEN tt END) AS Q4,
min(case when aa ='0070' THEN tt END) AS Q5,
min(case when aa ='0080' THEN tt END) AS Q6,
min(case when aa ='0090' THEN tt END) AS Q7,
(중략)
from
...