ORACLE HAVING GROUPID 0 4 5,402

by 냥냥펀치원투 [PL/SQL] HAVING GROUP_ID ORACLE 조건절 [2019.10.12 00:03:35]


안녕하세요. 신입 개발자 입니다.
구루비에서 자료 검색만 하다가 처음으로 글을 올려 보네요.
ORACLE 11G 에서 아래와 같이 구현 하고 싶습니다.

          GROUP BY ROLLUP (A.FACT, A.PLAN, A.SUB, A.LINE)
--          #if(파라메터1=='T1' || 파라메터1 == 'T2')
--            HAVING GROUPING_ID(A.FACT, A.PLAN, A.SUB,A.LINE) IN(0,1,15)
--           #else
--            HAVING GROUPING_ID(A.FACT, A.PLANT, A.SUB,A.LINE) IN(1,15)
--           #end

답변 부탁 드립니다.
그리고 소중한 시간으로 읽어 주셔서 감사합니다.

 

by jkson [2019.10.14 08:32:19]

HAVING ((GROUPING_ID(A.FACT, A.PLAN, A.SUB,A.LINE) IN(0,1,15) AND :파라메터1 IN ('T1','T2'))
OR (GROUPING_ID(A.FACT, A.PLAN, A.SUB,A.LINE) IN(1,15) AND :파라메터1 NOT IN ('T1','T2')))


by 냥냥펀치원투 [2019.10.31 10:56:10]

답변 감사합니다.


by 마농 [2019.10.14 08:57:42]

GROUP BY ROLLUP(a, b, c, d) 에서 GROUPING_ID(a, b, c, d) 중에 필요한 값은
(0, 1, 15) 세가지 뿐입니다. (3, 7) 두가지는 필요 없죠.
필요없는 조합까지 다 가져온뒤 제거하기보다는.
필요한 조합만 가져오는게 좋습니다.
GROUP BY ROLLUP((a, b, c), d) 하면 필요한 세가지 조합만 가져오게 됩니다.
또한 (1, 15) 는 무조건 나오므로 0 이 필요한지 아닌지만 체크하면 될 듯 하네요.

 GROUP BY ROLLUP ((a.fact, a.plan, a.sub), a.line)
HAVING GROUPING(a.line) IN (1, CASE WHEN :p1 IN ('T1','T2') THEN 0 END)

 


by 냥냥펀치원투 [2019.10.31 10:56:14]

답변 감사합니다.

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