오라클 rollup시 정렬 문제로 문의 드립니다. 0 3 8,142

by 손님 [SQL Query] [2011.11.15 23:52:40]



rollup을 쓰고 있습니다.
총계와 중갑 합계가 있는데 중간 합계는 그렇다 치고 총계는 제일 위로 위치를 해야 합니다.
그리고 화면상에서 컬럼1을 클릭할 경우 SORT가 변해야 합니다.


컬럼1     컬럼2 컬럼3
-------------------------------------
총합계    80    90 
 A    6    40    
 A    6    20
A중간합계   12 60
 B     1 2
 B     1     2
B중간합계    2     4   
,
,
,

컬럼1을 클릭하여 ORDER BY 변경시

컬럼1     컬럼2 컬럼3
-------------------------------------
총합계    80    90 
 B     1 2
 B     1     2
B중간합계    2     4 
 A     6    40    
 A     6    20
A중간합계  12    60
  
,
,
,


클릭을 하기전에는 전혀 문제없습니다.

근데 문제는 컬럼1을 누를경우 ORDER을 바꿔줘야 한다는건데요..
컬럼 1을 ASC 정렬시 총합계와 중간합계가 제일 밑으로 가겠죠
ORDER BY 컬럼1 ASC일시
그리고 ORDER BY 컬럼1 NULLS FIRST일시 컬럼1으로 정렬이 되지 않습니다. NULLS FIRST만 먹고 ;;

혹시 ORDER BY (컬럼1의 첫번째 정렬조건 그리고 컬럼1의 두번째 정렬조건), 컬럼2, 컬럼2
이렇게 쓰지 못하나요?

아 그리고 더럽게도 페이징 처리가 되어네요;;

by 손 [2011.11.16 00:56:35]
GROUPING(칼럼)||GROUPING(칼럼)
뭐 이런식으로 구룹핑 함수사요하면 레벨이 나옵니다..
낮은 레벨로 오더바이 시켜주면됩니다.

by 마농 [2011.11.16 09:01:50]
질문이 잘 이해가 안가네요?
정확하게 무었이 어떻게 안된다는 것인지요?
정확하게 무었을 어떻게 하겠다는 것인지요?
grouping(컬럼)과 grouping_id(컬럼, 컬럼) 등을 이용해 정렬해 보세요.

by 마농 [2011.11.16 13:39:15]
WITH t AS
(
SELECT 'A' col1, 6 col2, 40 col3 FROM dual
UNION ALL SELECT 'A', 6, 20 FROM dual
UNION ALL SELECT 'B', 1, 2 FROM dual
UNION ALL SELECT 'B', 1, 2 FROM dual
)
SELECT DECODE(1
, GROUPING(col1), '총합계'
, GROUPING(ROWNUM), col1 || '중간합계'
, col1) col1
, SUM(col2) col2
, SUM(col3) col3
FROM t
GROUP BY ROLLUP(col1, ROWNUM)
ORDER BY GROUPING(t.col1) DESC -- 총합계을 위로
, DECODE(:정렬구분, 'ASC', t.col1) ASC
, DECODE(:정렬구분, 'DESC', t.col1) DESC
, GROUPING(ROWNUM) -- 중간합계를 아래로
, ROWNUM
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입