[ Postgresql ] 오라클 pivot을 postgresql로 전환시 ~ in안에 변수 처리방법 0 4 2,260

by 루피 [DB 기타] pivot [2020.05.13 14:55:01]


안녕하세요. 고수님들께 질문하나 드립니다. 

오라클 에서는 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

...

 

 

by 마농 [2020.05.13 16:05:48]

마찬가지 아닌가요?
$pp$ 변수에 ", min(case when aa= '0010'  THEN tt END) AS Q1" 문자열 만들어 넘기시면 됩니다.
SELECT (중략) $pp$ (중략) FROM ...


by 루피 [2020.05.14 14:28:04]

답변 감사드립니다. 


by 루피 [2020.05.14 14:31:37]

CROSSTAB이 방법이 될 수 있을까요? 


by 마농 [2020.05.14 15:21:14]

마찬가지 아닌가요?
crosstab 으로 구현된 쿼리를 만들어 실행 테스트 해보신 뒤에.
해당 쿼리에 $pp$ 적용하시면 됩니다.

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