当前位置: 首页 > news >正文

SQL Server 查询数据并汇总相关技巧 23.08.08

GROUPING
是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。

仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组。

语法
GROUPING ( column_name )

参数
column_name

是 GROUP BY 子句中用于检查 CUBE 或 ROLLUP 空值的列。

返回类型
int


--首先创建测试表、添加数据
create table #t(a int,b int,c int,d int,e int)
insert into #t values(1,2,3,4,5)
insert into #t values(1,2,3,4,6)
insert into #t values(1,2,3,4,7)
insert into #t values(1,2,3,4,8)
insert into #t values(1,3,3,4,5)
insert into #t values(1,3,3,4,6)
insert into #t values(1,3,3,4,8)
insert into #t values(1,3,3,4,7)insert into #t values(2,2,2,4,5)
insert into #t values(2,2,3,4,6)
insert into #t values(2,2,4,4,7)
insert into #t values(2,2,5,4,8)
insert into #t values(2,3,6,4,5)
insert into #t values(2,3,3,4,6)
insert into #t values(2,3,3,4,8)
insert into #t values(2,3,3,4,7)select *from #t--情况一:只有一个分类汇总列时,只需要一个合计。只需要增加with rollup即可
select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,
sum(b),sum(c),sum(d),sum(e) from #t group by a with rollup

--情况二:有多个分类汇总列,只需要一个合计.增加rollup之后,需要增加判断。
select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,b,
sum(c),sum(d),sum(e) from #t
group by a,b with rollup
having grouping(b)=0 or grouping(a)=1select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,b,c,
sum(d),sum(e) from #t
group by a,b,c with rollup
having grouping(c)=0 or grouping(a)=1

--情况三:有多个分类汇总列,需要全部的小计和合计。
select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,case when grouping(b)=1 and grouping(a)=0 then '小计' else cast(b as varchar) end b,case when grouping(c)=1 and grouping(b)=0 then '小计' else cast(c as varchar) end c,
sum(d),sum(e) from #t
group by a,b,c with rollup--另外一种显示小计的方式
select case when grouping(a)=1 then '合计'when grouping(b)=1 then cast(a as varchar)+'小计'else cast(a as varchar) end a,case when grouping(b)=0 and grouping(c)=1then cast(b as varchar)+'小计' else cast(b as varchar) end b,case when grouping(c)=1 and grouping(b)=0then '' else cast(c as varchar) end c,
sum(d),sum(e) from #t
group by a,b,c with rollup

--情况四:有多个分类汇总列,需要部分的小计和合计
select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,b,case when grouping(c)=1 and grouping(b)=0 then '小计' else cast(c as varchar) end c,
sum(d),sum(e) from #t
group by a,b,c with rollup
having grouping(a)=1 or grouping(b)=0select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,case when grouping(b)=1 and grouping(a)=0 then '小计' else cast(b as varchar) end b,c,
sum(d),sum(e) from #t
group by a,b,c with rollup
having grouping(a)=1 or grouping(b)=1 or grouping(c)=0

http://www.lryc.cn/news/119706.html

相关文章:

  • 第一章 SpringBoot 介绍-最小配置
  • 10-1_Qt 5.9 C++开发指南_Data Visualization实现数据三维显示
  • [保研/考研机试] KY87 鸡兔同笼 北京大学复试上机题 C++实现
  • Jmeter快捷方式和应用图标设置
  • PHP sm4国密加密解密文件
  • CBCGPRibbon 添加Edit、Combox、Hyperlink控件
  • 漫话拥塞控制:BBR 是个单流模型
  • HTML详解连载(1)
  • 最新版本2023UI千月影视APP源码 开源完美版前后端完美匹配 后端基于ThinkPHP框架
  • centos7安装Docker详细步骤(无坑版教程)
  • Python入门自学进阶-Web框架——39、redis、rabbitmq、git——2
  • 了解IL汇编跳转语句
  • JVM运行时五大数据区域详解
  • Vuex 使用教程
  • springboot启动you will need to add ‘org.slf4j‘ to prefer-application-packages异常解决
  • 云原生核心原则和特征
  • 【ElasticSearch入门】
  • SQL | 注释
  • oi知识表+NOIP提高组算法及算法思想总结
  • 【mysql】实现递归查询
  • JUC并发编程之原子类
  • 测试设计中隐藏的边界有哪些?
  • 领航优配:暑期旅游市场热度持续攀升,相关公司业绩有望持续释放
  • 基于 CentOS 7 构建 LVS-DR 集群 及 配置nginx负载均衡
  • docker搭建在线Markdown服务器
  • 打靶练习:WestWild 1.1(一个简单但不失优雅的Ubuntu靶机)
  • 【2.3】Java微服务:sentinel服务哨兵
  • 【C++】开源:abseil-cpp基础组件库配置使用
  • 【GPT-3 】创建能写博客的AI工具
  • [保研/考研机试] KY35 最简真分数 北京大学复试上机题 C++实现