首页 > 代码库 > 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 学习笔记