[ Oracle - ROLLUP ]

 

☞ ROLLUP 예제1

 

원하는 결과 ] 
    --------------------------------------------------------------------------
      계정명           전표일자     일련번호     차변금액         대변금액 
    --------------------------------------------------------------------------
    인건비            2010.01.01        1           100
    인건비            2010.01.01        2           110
    인건비            2010.03.03        1           110
    인건비            2010.03.04        1                            50
    
인건비계                                        270
    차량유지비        2010.02.14      300            50
    차량유지비       2010.02.26        3            20
    차량유지비        2010.03.15       50           100
    
차량유지비계                                    150
    
총계                                            570              50 

SQL : 
   
WITH DATA1 AS (
       SELECT '인건비'     AS NAME, '2010.01.01' AS DATE1, 1   AS NUMBER1, 100  AS AMT1, NULL  AS AMT2, '비고1' AS NOTES FROM DUAL UNION ALL
       
SELECT '인건비'     AS NAME, '2010.01.01' AS DATE1, 1   AS NUMBER1, 100  AS AMT1, NULL  AS AMT2, '비고2' AS NOTES FROM DUAL UNION ALL
       
SELECT '인건비'     AS NAME, '2010.02.01' AS DATE1, 2   AS NUMBER1, 110  AS AMT1, NULL  AS AMT2, '비고3' AS NOTES FROM DUAL UNION ALL
       
SELECT '인건비'     AS NAME, '2010.03.03' AS DATE1, 1   AS NUMBER1, 110  AS AMT1, NULL  AS AMT2, '비고4' AS NOTES FROM DUAL UNION ALL
       
SELECT '인건비'     AS NAME, '2010.03.04' AS DATE1, 1   AS NUMBER1, NULL AS AMT1, 50    AS AMT2, '비고5' AS NOTES FROM DUAL UNION ALL
       
SELECT '차량유지비' AS NAME, '2010.02.14' AS DATE1, 300 AS NUMBER1, 50   AS AMT1, NULL  AS AMT2, '비고6' AS NOTES FROM DUAL UNION ALL
       
SELECT '차량유지비' AS NAME, '2010.02.26' AS DATE1, 3   AS NUMBER1, NULL AS AMT1, 20    AS AMT2, '비고7' AS NOTES FROM DUAL UNION ALL
       
SELECT '차량유지비' AS NAME, '2010.03.15' AS DATE1, 50  AS NUMBER1, 100  AS AMT1, NULL  AS AMT2, '비고8' AS NOTES FROM DUAL 
    )

     SELECT DECODE(A.GUBUN, 0, A.NAME, 1, A.NAME || ' 계', 3, '총계')   AS "계정명"
          , A.DATE1  AS "전표일자"
          , A.NOTES
          , 
DECODE(A.GUBUN, 0, A.NUMBER1, 1, NULL)                      AS "일련번호"
          , 
DECODE(A.GUBUN, 0, A.AMT1, 1, A.AMT1 - A.AMT2, 3, AMT1)     AS "차변금액"
          , 
DECODE(A.GUBUN, 0, A.AMT2, 1, NULL, 3, AMT2)                AS "대변금액"
          , GUBUN
       
FROM (
             
SELECT A.NAME
                  , A.DATE1
                  , A.NOTES
                  , 
MIN(A.NUMBER1)   AS NUMBER1
                  , 
SUM(AMT1)    AS AMT1
                  , 
SUM(AMT2)    AS AMT2
                  , 
GROUPING_ID(A.NAME, A.DATE1) AS GUBUN
               
FROM DATA1 A
              
GROUP BY ROLLUP(a.name, (a.date1, a.number1, a.notes))
             ) A ; 


 
 

 

 

'(DB) Oracle > SQL.통계-통계함수' 카테고리의 다른 글

Oracle - ROLLUP예제1  (0) 2017.01.21
Oracle - RANK()  (0) 2017.01.21
Oracle - RANK()  (0) 2017.01.21
Oracle - LAG.LEAD()  (0) 2017.01.21
Oracle - GROUPING / GROUPING_ID  (0) 2017.01.21
Posted by 농부지기
,