Group分组及其扩展总结(三)

 1 --1.Grouping_id
 2 --Grouping_id借助having子句可以对记录进行过滤
 3 --将不包含小计或者总计的记录过滤掉
 4 --Grouping_id可以返回一列或者多列,返回Grouping位向量的十进制值
 5 select grouping(a.division_id),
 6        grouping(a.job_id),
 7        grouping_id(a.division_id, a.job_id),
 8        sum(a.salary)
 9   from employees2 a
10  group by cube(a.division_id, a.job_id)
11  order by a.division_id, a.job_id
12  
13  运行结果为:
14 GROUPING(A.DIVISION_ID)    GROUPING(A.JOB_ID)    GROUPING_ID(A.DIVISION_ID,A.JO    SUM(A.SALARY)
15  1    0    0    0    530000
16  2    0    0    0    800000
17  3    0    0    0    280000
18  4    0    1    1    1610000
19  5    0    0    0    245000
20  6    0    0    0    805000
21  7    0    0    0    270000
22  8    0    1    1    1320000
23  9    0    0    0    4446000
24 10    0    0    0    490000
25 11    0    1    1    4936000
26 12    0    0    0    465000
27 13    0    0    0    115000
28 14    0    0    0    435000
29 15    0    1    1    1015000
30 16    1    0    2    245000
31 17    1    0    2    6246000
32 18    1    0    2    800000
33 19    1    0    2    115000
34 20    1    0    2    1475000
35 21    1    1    3    8881000
36 
37 --2.Grouping_ID用处在于使用having子句过滤记录,只要控制grouping_id记录的返回值大于零就可以
38 select case grouping(b.division_id)
39          when 1 then '所有部门'
40          else b.division_id
41        end,
42        case grouping(b.job_id)
43          when 1 then '所有工种'
44          else b.job_id
45        end,
46        sum(b.salary),
47        grouping_id(b.division_id, b.job_id)
48   from employees2 b
49  group by cube(b.division_id, b.job_id)
50 having grouping_id(b.division_id, b.job_id) > 0 --两列或者有一列为空
51  order by b.division_id, b.job_id
52 
53 运行结果
54 CASEGROUPING(B.DIVISION_ID)WHE    CASEGROUPING(B.JOB_ID)WHEN1THE    SUM(B.SALARY)    GROUPING_ID(B.DIVISION_ID,B.JO
55  1    BUS    所有工种    1610000    1
56  2    OPE    所有工种    1320000    1
57  3    SAL    所有工种    4936000    1
58  4    SUP    所有工种    1015000    1
59  5    所有部门    ENG    245000    2
60  6    所有部门    MGR    6246000    2
61  7    所有部门    PRE    800000    2
62  8    所有部门    TEC    115000    2
63  9    所有部门    WOR    1475000    2
64 10    所有部门    所有工种    8881000    3

 

posted @ 2012-11-04 16:00  原想  阅读(216)  评论(0编辑  收藏  举报