쿼리 좀 물어 볼께요 0 3 1,003

by 아이뻐 [DB 기타] [2012.12.05 19:53:35]


안녕하십니까.
by 아발란체 [2012.12.05 20:58:09]
WITH T AS (
    SELECT 1 "S", 'A' "H", 1 "K", 100 "G" FROM DUAL UNION ALL
    SELECT 1 "S", 'A' "H", 1 "K", 100 "G" FROM DUAL UNION ALL
    SELECT 1 "S", 'B' "H", 1 "K", 200  "G" FROM DUAL UNION ALL
    SELECT 1 "S", 'B' "H", 1 "K", 200 "G" FROM DUAL UNION ALL
    SELECT 2 "S", 'A' "H", 1 "K", 300 "G" FROM DUAL UNION ALL
    SELECT 2 "S", 'A' "H", 1 "K", 300 "G" FROM DUAL
)
SELECT
    DECODE(GROUPING(S), 1, '합계',
    DECODE(GROUPING(H), 1, H||'소관합계', S||'소관')
    ) SG,
   H 회계, SUM(K) 계정, SUM(G) 금액
FROM
    T
GROUP BY
    GROUPING SETS((), (S), (S, H))
ORDER BY
    GROUPING(S) DESC, S, GROUPING(H) DESC

by 마농 [2012.12.06 09:15:25]
WITH t AS
(
SELECT 1 s, 'A' h, 1 k, 100 g FROM dual
UNION ALL SELECT 1, 'A', 1, 100 FROM dual
UNION ALL SELECT 1, 'B', 1, 200 FROM dual
UNION ALL SELECT 1, 'B', 1, 200 FROM dual
UNION ALL SELECT 2, 'A', 1, 300 FROM dual
UNION ALL SELECT 2, 'A', 1, 300 FROM dual
)
SELECT DECODE(GROUPING_ID(s, h)
      , 3, '합계', 1, s||'소관합계'
      , NULLIF(s||'소관', LAG(s||'소관') OVER(PARTITION BY GROUPING(h) ORDER BY h))
      ) s
     , h
     , k
     , SUM(g) g
  FROM t
 GROUP BY ROLLUP(s, (h, k))
 ORDER BY t.s NULLS FIRST, t.h NULLS FIRST
;

by 알콩 [2012.12.06 10:30:48]
 
-- 쿼리 공부중이라 마농님꺼 참고해서 작성해 보았습니다. 
-- 마농님께는 참 배울게 많은거 같아요 ^^;

WITH TMP_TEST
AS
(
  select 1 "S", 'A' "H", 1 "K", 100 "G" from dual union all
  select 1 "S", 'A' "H", 1 "K", 100 "G" from dual union all
  select 1 "S", 'B' "H", 1 "K", 200 "G" from dual union all
  select 1 "S", 'B' "H", 1 "K", 200 "G" from dual union all
  select 2 "S", 'A' "H", 1 "K", 300 "G" from dual union all
  select 2 "S", 'A' "H", 1 "K", 300 "G" from dual
)
SELECT DECODE(GROUPING(S)||GROUPING(H)
        ,'11','합계'
        ,'01', S||'소관합계'
        ,DECODE(RANK()OVER(PARTITION BY S ORDER BY H),1,S||'소관')) AS "소관"
   , H  AS "회계"
   , K  AS "계정"
   , SUM(G) AS "금액"
FROM  TMP_TEST
GROUP BY ROLLUP(S,H,K)
HAVING NOT(GROUPING(S) = 0 AND GROUPING(H) = 0 AND GROUPING(K) = 1)
ORDER BY GROUPING(S) DESC, S ASC
    , GROUPING(H) DESC, "회계" ASC
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입