Sql使用WITH ROLLUP 进行分类汇总及小计功能

效果如下:

测试代码如下:

CREATE TABLE #test
    (
      Name VARCHAR(10) ,
      [procedure] CHAR(1) ,
      model VARCHAR(5) ,
      quantity INT
    );

INSERT  INTO #test
        SELECT  ‘A‘ ,
                ‘1‘ ,
                ‘φ50‘ ,
                500
        UNION ALL
        SELECT  ‘A‘ ,
                ‘1‘ ,
                ‘φ50‘ ,
                600
        UNION ALL
        SELECT  ‘A‘ ,
                ‘1‘ ,
                ‘φ100‘ ,
                500
        UNION ALL
        SELECT  ‘A‘ ,
                ‘2‘ ,
                ‘φ50‘ ,
                700
        UNION ALL
        SELECT  ‘A‘ ,
                ‘2‘ ,
                ‘φ100‘ ,
                200
        UNION ALL
        SELECT  ‘B‘ ,
                ‘1‘ ,
                ‘φ50‘ ,
                1000;

SELECT  CASE WHEN GROUPING(Name) = 1 THEN ‘总计‘
             WHEN GROUPING(Name) = 0
                  AND GROUPING([procedure]) = 1 THEN Name + ‘合计‘
             WHEN GROUPING(Name) = 0
                  AND GROUPING([procedure]) = 0
                  AND GROUPING([model]) = 1
             THEN Name + ‘的‘ + [procedure] + ‘小计‘
             ELSE Name
        END AS Name ,
        CASE WHEN GROUPING([model]) = 1 THEN ‘‘
             ELSE [procedure]
        END AS [procedure] ,
        ISNULL(model, ‘‘) AS model ,
        SUM(quantity) AS quantity
FROM    #test
GROUP BY Name ,
        [procedure] ,
        model
        WITH ROLLUP;

DROP TABLE #test;

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 15:43:57

Sql使用WITH ROLLUP 进行分类汇总及小计功能的相关文章

查询报表增加小计功能

SELECT ISNULL(T1.KHMC, '总计')客户名称, ISNULL(T1.DJMC, '小计')单据名称, CAST(SUM(T1.SL) AS INT)数量 FROM ( SELECT vl.DM1, k.KHMC, vl.DJMC, vl.SL FROM VW_LSXHDMX AS vl INNER JOIN KEHU AS k ON k.CKDM = vl.DM1 ) T1 GROUP BY T1.KHMC , T1.DJMC WITH ROLLUP

学习SQL的点点滴滴(五)-DELETE小计

惨痛的教训: 某次在执行delete时,一时疏忽忘记写where条件了, 1.删除tb_mobile_cust_micromsg中的内容,前提是c_customer这个字段的值与#datamod表中c_userno这个字段的值相等. delete from tb_mobile_cust_micromsg where tb_mobile_cust_micromsg.c_customer in (select C_USERNO from #datamod where #datamod.C_USERN

T-SQL多个小计+合计,分类汇总

select case when grouping(姓名)=1 then '合计' else cast(姓名 as varchar) end 姓名, case when grouping(学期)=1 and grouping(姓名)=0 then '姓名小计' else cast(学期 as varchar) end 学期, case when cast(学期 as varchar)<>cast('姓名小计' AS varchar) and ISNULL(考次, '') = '' then '

sql中 with rollup 、with cube、grouping 统计函数用法

with rollup .with cube.grouping CUBE 和 ROLLUP 之间的区别在于: CUBE 生成的结果集显示了所选列中值的所有组合的聚合. ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合. grouping: 当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0. ----------------------------------------------------

SQL Server WITH ROLLUP、WITH CUBE、GROUPING语句的应用

CUBE:CUBE 生成的结果集显示了所选列中值的所有组合的聚合. ROLLUP:ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合. GROUPING:当行由 CUBE 或 ROLLUP 运算符添加时,该函数将导致附加列的输出值为 1:当行不由 CUBE 或 ROLLUP 运算符添加时,该函数将导致附加列的输出值为 0. 先创建一个临时表: 1 create table #temp 2 ( 3 姓名 varchar(50) not null, 4 课程 varchar(50) nu

oracle group by rollup decode grouping nvl等判断或者小计合计心得

在做oracle 047第12题时,遇到group by 语句,由此遇到group by  rollup,decode,grouping,nvl,nvl2,nullif,RATIO_TO_REPORT等. 1. decode  与if...then,case...when...这类流数据语句功能差不多 decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(值1) ELSIF 条件=值2 THEN RETU

Sql分组合计小计查询

效果如下: 用的表和字段: -table 实收水费:hx_t_received --字段收费部门id:hx_fdepartmentid  1.收费部门名称:hx_fdepartmentname 应收水费信息ID:hx_freceivableid --收费类别:hx_ftype (水费(1):再分[开户(table) 供水类别:自来水(100000001)==水费,中水(100000002)==中水费],代理费(2)==污水处理费) --实收金额:hx_freceivedamount  创建时间:

HTML5进阶段内联标签汇总(小篇)

HTML5进阶段内联标签汇总(小篇) 内联元素,与别人公用一行,但是设置宽高无效.其特点: ①和其他元素都在一行上: ②高,行高及外边距和内边距不可改变: ③宽度就是它的文字或图片的宽度,不可改变 ④内联元素只能容纳文本或者其他内联元素 代码如下: 1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>

SQL Server 中关于 @@error 的一个小误区

原文:SQL Server 中关于 @@error 的一个小误区 在SQL Server中,我常常会看到有些前辈这样写: if(@@error<>0) ROLLBACK TRANSACTION T else COMMIT TRANSACTION T 一开始,我看见别人这么写,我就想当然的以为它只是个计数器,每当检测到一处错误时,@@error的值+1,不过就因为这个理所当然,所以杯具了... 实际上,它并不是一个计数器,它是一个动态的值,动态的标识最后一条SQL命令执行的结果,如果成功则为0,