Programming/Oracle

쿼리문으로 소계행 제외하고 합계 처리하기

초록깨비 2009. 2. 13. 14:36
728x90

SELECT CASE WHEN GROUPING(ProductUnit) = 1 THEN N'합계'
                      ELSE ProductUnit END AS ProductUnit
      ,CASE WHEN GROUPING(ProductID) = 0 THEN CONVERT(VARCHAR(5),ProductID)
                 ELSE '' END AS ProductID
      ,CASE WHEN GROUPING(ProductID) = 0 THEN MAX(Name)
                 ELSE '' END AS Name
      ,CASE WHEN GROUPING(ProductID) = 0 THEN MAX(ProductNumber)
                 ELSE '' END AS ProductNumber
      ,SUM(SafetyStockLevel) AS SafetyStockLevel
      ,SUM(ReorderPoint) AS ReorderPoint
      ,GROUPING(ProductUnit) AS UnitGroup
      ,GROUPING(ProductID) AS IDGroup
  FROM ( SELECT ProductID
               ,Name
               ,CASE WHEN LEFT(ProductNumber,1) = 'A' THEN 'A'
                         WHEN LEFT(ProductNumber,1) = 'B' THEN 'B'
                         WHEN LEFT(ProductNumber,1) = 'C' THEN 'C'
                END AS ProductUnit
               ,ProductNumber
               ,SafetyStockLevel
               ,ReorderPoint
           FROM Production.Product
          WHERE ProductID < 320  ) AS A
 GROUP BY ProductUnit, ProductID WITH ROLLUP
 HAVING GROUPING(ProductUnit)+GROUPING(ProductID) IN (0,2)
728x90