with rollup与 with cube 学习笔记

测试语句:

 1 USE [AIS20140113215649]
 2 GO
 3 /****** Object:  Table [dbo].[t_studet]    Script Date: 10/29/2014 16:35:48 ******/
 4 SET ANSI_NULLS ON
 5 GO
 6 SET QUOTED_IDENTIFIER ON
 7 GO
 8 if exists (select * from sysobjects where xtype='U' and name = 't_studet')
 9 drop table t_studet
10 GO
11 CREATE TABLE [dbo].[t_studet](
12     [ID] [int] NOT NULL,
13     [sex] [nchar](10) NOT NULL,
14     [class] [nchar](10) NOT NULL,
15     [score] [int] NOT NULL,
16  CONSTRAINT [PK_t_studet] PRIMARY KEY CLUSTERED 
17 (
18     [ID] ASC
19 )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, 
20        ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
21 ) ON [PRIMARY]
22 GO
23 
24 select * from t_studet;
25 
26 insert into t_studet values(1,'','二年级',1);
27 insert into t_studet values(2,'','三年级',4);
28 insert into t_studet values(3,'','二年级',10);
29 insert into t_studet values(4,'','三年级',16);

查询结果分析

1 ----明细查询
2 select * from t_studet;

ID          sex        class      score
----------- ---------- ---------- -----------
1           男          二年级        1
2           男          三年级        4
3           女          二年级        10
4           女          三年级        16

----分组查询
select sex,class,COUNT(ID),SUM(score) from t_studet
group by sex,class;

sex        class                 
---------- ---------- ----------- -----------
男          二年级        1           1
女          二年级        1           10
男          三年级        1           4
女          三年级        1           16

----分组查询并合计
select class,sex,COUNT(ID),SUM(score) from t_studet
group by class,sex
with rollup;

class      sex                   
---------- ---------- ----------- -----------
二年级        男          1           1
二年级        女          1           10
二年级        NULL       2           11
三年级        男          1           4
三年级        女          1           16
三年级        NULL       2           20
NULL       NULL       4           31

----分组查询并合计,标记合计列
select 
       case when(grouping(sex)=1 and grouping(class)=1) then '总计' else class end,
       case 
            when(grouping(sex)=1 and grouping(class)=0) then '小计' 
            when(grouping(sex)=1 and grouping(class)=1) then '' 
            else sex 
       end,
       COUNT(ID),SUM(score) 
from t_studet
group by class,sex
with rollup;
-------------左连接式的小计

----grouping(class)=0 代表 有数据
----grouping(class)=1 代表 无数据

---------- ---------- ----------- -----------
二年级        男          1           1
二年级        女          1           10
二年级        小计         2           11
三年级        男          1           4
三年级        女          1           16
三年级        小计         2           20
总计                    4           31

 1 ----分组查询并合计,标记合计列,使用条件过滤
 2 select 
 3        case when(grouping(sex)=1 and grouping(class)=1) then '总计' else class end,
 4        case 
 5             when(grouping(sex)=1 and grouping(class)=0) then '小计' 
 6             when(grouping(sex)=1 and grouping(class)=1) then '' 
 7             else sex 
 8        end,
 9        COUNT(ID),SUM(score) 
10 from t_studet
11 group by class,sex 
12 with rollup having (grouping(sex)=0 and grouping(class)=0)

                                 
---------- ---------- ----------- -----------
二年级        男          1           1
二年级        女          1           10
三年级        男          1           4
三年级        女          1           16

select class,sex,COUNT(ID),SUM(score) 
from t_studet 
group by sex,class with cube 

-------------全连接式的小计

class      sex                   
---------- ---------- ----------- -----------
二年级        男          1           1
二年级        女          1           10
二年级        NULL       2           11
三年级        男          1           4
三年级        女          1           16
三年级        NULL       2           20
NULL       NULL       4           31
NULL       男          2           5
NULL       女          2           26

 

posted @ 2014-12-18 16:12  温柔一点  阅读(1339)  评论(0)    收藏  举报