Oracle PL/SQL之GROUPING 函数


在使用ROLLUP或CUBE进行GROUP操作时会产生内容为空的字段,即值为NULL的字段,那我们如何区分这些显示为空的字段到底是该字段本身值就是NULL还是由ROLLUP和CUBE生成的呢?

这时可以用GROUPING(groupingfield) 来解决,返回0表示该字段本身值就是NULL,返回1则表示是由ROLLUP或CUBE生成的。 

eg:

  1. SELECT   department_id deptid, job_id job, SUM (salary),  
  2.          GROUPING (department_id) grp_dept, GROUPING (job_id) grp_job  
  3.     FROM employees  
  4.    WHERE department_id < 50  
  5. GROUP BY ROLLUP (department_id, job_id);  
  6.   
  7.   
  8.     DEPTID JOB        SUM(SALARY)   GRP_DEPT    GRP_JOB  
  9. ---------- ---------- ----------- ---------- ----------  
  10.         10 AD_ASST           4400          0          0  
  11.         10                   4400          0          1  
  12.         20 MK_MAN           13000          0          0  
  13.         20 MK_REP            6000          0          0  
  14.         20                  19000          0          1  
  15.         30 PU_MAN           11000          0          0  
  16.         30 PU_CLERK         13900          0          0  
  17.         30                  24900          0          1  
  18.         40 HR_REP            6500          0          0  
  19.         40                   6500          0          1  
  20.                             54800          1          1  
  21.   
  22. 11 rows selected.  

相关内容