首页 > 代码库 > with rollup与 with cube 学习笔记
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_studet10 GO11 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] ASC19 )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 GO23 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_studetgroup by sex,class;
sex class
---------- ---------- ----------- -----------
男 二年级 1 1
女 二年级 1 10
男 三年级 1 4
女 三年级 1 16
----分组查询并合计select class,sex,COUNT(ID),SUM(score) from t_studetgroup by class,sexwith 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_studetgroup by class,sexwith 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_studet11 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
with rollup与 with cube 学习笔记