UNION 等集合操作符:
UNION 等以第一个 SELECT  的 列明 作为 整个结果集的列明,整个结果集 唯一认可的 唯一逻辑处理阶段 是 ORDER BY 
这个意思是说 只有 ORDER BY 是对整个结果集作用的,其它都操作都作用在 UINON 两侧的 子集合中。
EXCEPT 操作符也是 提出了重复值的
此外,它认为两个 null 值是相等的,
而 NOT EXISTS 认为两个 null 值不相等,
集合操作符的 优先级是 INTERSECT 最大,其它都一样
CTE 递归 是个 重点, 分为 单个 定位点成员,单个递归成员,多个定位点,多个递归成员
1. 单个 定位点成员,单个递归成员
//todo
2. 多个定位点,多个递归成员
 
// todo
特别注意 只有一个维度去观看的时候,WITH CUBE 或者 WITH ROLLUP 的结果是一样的。
而下面 例子中的 WITH CUBE 或者 WITH ROLLUP 语句都会被 GROUP BY 后面的 CUBE(col1,col2) 或者 ROLLUP(col1,col2) 所替代,因为这种更加符合 ISO 标准些
IF object_id('dbo.Inventory','U') IS NOT NULL 
DROP TABLE dbo.Inventory 
GO
CREATE TABLE Inventory(
Item varchar(5),
Color char(4),
Qty int
)
INSERT INTO dbo.Inventory 
VALUES('桌子','蓝色',2),
('桌子','红色',1),
('桌子','蓝色',3),
('椅子','蓝色',4),
('椅子','红色',6),
('椅子','红色',5)

select Item,Color,SUM(Qty) AS Sum_Qty from dbo.Inventory GROUP BY Item,Color WITH CUBE  --  Group by Item,Color WITH CUBE 也可以替换为 Group by CUBE(Item,Color) 以下同理

select Item,Color,SUM(Qty) AS Sum_Qty from dbo.Inventory GROUP BY Item,Color with rollup
重点:
区分 空值与汇总值
使用 Grouping(Item) 或者 Grouping(Color) 函数 去区分
当 Grouping 函数返回 1 时候证明是汇总的,否则 就是真正的 null 值
1. Cube ------======---
select 
CASE WHEN Grouping(Item) = 1 
Then '汇总' ELSE ISNULL(Item,'未知') 
End as Item,
CASE WHEN Grouping(Color) = 1 Then '汇总' ELSE ISNULL(Color,'未知') End as Item,
SUM(Qty) AS Sum_Qty 
from dbo.Inventory GROUP BY Item,Color with cube

2. 对于 ROLLUP ------======
select 
CASE WHEN Grouping(Item) = 1 
Then '汇总' ELSE ISNULL(Item,'未知') 
End as Item,
CASE WHEN Grouping(Color) = 1 Then '汇总' ELSE ISNULL(Color,'未知') End as Item,
SUM(Qty) AS Sum_Qty 
from dbo.Inventory GROUP BY Item,Color with rollup

3.怎样返回指定维度的 汇总:
1。 使用派生表 然后 对派生表 做 where 条件筛选
即 把上面汇总的 select 查询语句做成一个 子查询数据集
然后从这个 数据集中 筛选 Item is not null and Color is null 诸如此类的。
2.   使用GROUPING SETS 指定仅需要获取所需的分组
不带 null, null 这种情况的:
带上 null , null 这种情况的 
UNION 等集合操作符:
UNION 等以第一个 SELECT  的 列明 作为 整个结果集的列明,整个结果集 唯一认可的 唯一逻辑处理阶段 是 ORDER BY 
这个意思是说 只有 ORDER BY 是对整个结果集作用的,其它都操作都作用在 UINON 两侧的 子集合中。
EXCEPT 操作符也是 提出了重复值的
此外,它认为两个 null 值是相等的,
而 NOT EXISTS 认为两个 null 值不相等,
集合操作符的 优先级是 INTERSECT 最大,其它都一样
CTE 递归 是个 重点, 分为 单个 定位点成员,单个递归成员,多个定位点,多个递归成员
1. 单个 定位点成员,单个递归成员
//todo
2. 多个定位点,多个递归成员
 
// todo
特别注意 只有一个维度去观看的时候,WITH CUBE 或者 WITH ROLLUP 的结果是一样的。
而下面 例子中的 WITH CUBE 或者 WITH ROLLUP 语句都会被 GROUP BY 后面的 CUBE(col1,col2) 或者 ROLLUP(col1,col2) 所替代,因为这种更加符合 ISO 标准些
IF object_id('dbo.Inventory','U') IS NOT NULL 
DROP TABLE dbo.Inventory 
GO
CREATE TABLE Inventory(
Item varchar(5),
Color char(4),
Qty int
)
INSERT INTO dbo.Inventory 
VALUES('桌子','蓝色',2),
('桌子','红色',1),
('桌子','蓝色',3),
('椅子','蓝色',4),
('椅子','红色',6),
('椅子','红色',5)

select Item,Color,SUM(Qty) AS Sum_Qty from dbo.Inventory GROUP BY Item,Color WITH CUBE  --  Group by Item,Color WITH CUBE 也可以替换为 Group by CUBE(Item,Color) 以下同理

select Item,Color,SUM(Qty) AS Sum_Qty from dbo.Inventory GROUP BY Item,Color with rollup
重点:
区分 空值与汇总值
使用 Grouping(Item) 或者 Grouping(Color) 函数 去区分
当 Grouping 函数返回 1 时候证明是汇总的,否则 就是真正的 null 值
1. Cube ------======---
select 
CASE WHEN Grouping(Item) = 1 
Then '汇总' ELSE ISNULL(Item,'未知') 
End as Item,
CASE WHEN Grouping(Color) = 1 Then '汇总' ELSE ISNULL(Color,'未知') End as Item,
SUM(Qty) AS Sum_Qty 
from dbo.Inventory GROUP BY Item,Color with cube

2. 对于 ROLLUP ------======
select 
CASE WHEN Grouping(Item) = 1 
Then '汇总' ELSE ISNULL(Item,'未知') 
End as Item,
CASE WHEN Grouping(Color) = 1 Then '汇总' ELSE ISNULL(Color,'未知') End as Item,
SUM(Qty) AS Sum_Qty 
from dbo.Inventory GROUP BY Item,Color with rollup

3.怎样返回指定维度的 汇总:
1。 使用派生表 然后 对派生表 做 where 条件筛选
即 把上面汇总的 select 查询语句做成一个 子查询数据集
然后从这个 数据集中 筛选 Item is not null and Color is null 诸如此类的。
2.   使用GROUPING SETS 指定仅需要获取所需的分组
不带 null, null 这种情况的:
带上 null , null 这种情况的 

转载于:https://www.cnblogs.com/Frank99/p/5319655.html

第八章 CTE 递归 及 分组汇总 高级部分(多维数据集)相关推荐

  1. 数据湖 多维数据集_按汇总分组/多维数据集

    数据湖 多维数据集 时不时地,您会遇到一个使您达到SQL限制的要求. 我们中的许多人可能会早早放弃并使用Java / [或您的语言]计算内容. 相反,使用SQL可能是如此简单快捷. 如果您使用的是高级 ...

  2. 按汇总分组/多维数据集

    时不时地,您会遇到一个使您达到SQL限制的要求. 我们中的许多人可能会提早放弃并使用Java / [或您的语言]计算内容. 相反,使用SQL可能是如此简单快捷. 如果您使用的是高级数据库,例如DB2 ...

  3. SQL Server中公用表表达式 CTE 递归的生成帮助数据,以及递归的典型应用

    原文: SQL Server中公用表表达式 CTE 递归的生成帮助数据,以及递归的典型应用 本文出处:http://www.cnblogs.com/wy123/p/5960825.html 我们在做开 ...

  4. PowerBI随笔(2)-分组依据进行分组汇总

    分组汇总 多条件分组 结果: 然后排序

  5. sql cte递归_准备好,开始吧– SQL Server如何处理递归CTE

    sql cte递归 First of all, a quick recap on what a recursive query is. 首先,快速回顾一下递归查询是什么. Recursive quer ...

  6. SQL分析在2020年度第一季度的购买人数,销售金额,客单价,客单件人均购买频次(时间函数、分组汇总、常用指标计算)

    [面试题]某公司数据库里有3张表,销售订单表.产品明细表.销售网点表 "销售订单表"记录了销售情况,每一张数据表示哪位顾客.在哪一天.哪个网点购买了什么产品,购买的数量是多少,以及 ...

  7. 关于SQLServer2005的学习笔记——CTE递归和模拟测试数据

    在 Oracle 中模拟测试 数据是非常简单的一件事情. Oracle 首先提供了一个 dual 的虚表 其次提供了一个 Connect by 语句,实现了虚表数据列的模拟 最后 Oracle 提供了 ...

  8. 用脚本语言对 Excel 分组汇总

    [原帖] https://stackoverflow.com/questions/64182673/excel-find-duplicates-in-one-column-then-sum-quant ...

  9. Excel 特殊分组汇总示例

    在 Excel 中分析数据时,往往会用到数据透视表.通过透视表,可以对数据从不同维度.不同类别来汇总和分析.但是透视表功能很简单,分组依据也很固化.需要将部分数据合并.分区间或者允许重复的特殊条件来分 ...

最新文章

  1. 量子纠缠背后的故事(廿五):深藏幕后的神秘力量
  2. Spring之Spring Boot
  3. mysql多源gtid复制_mysql的GTID复制和多源复制
  4. android R启动找不到super分区问题
  5. ad20生成二维码_AD20学习笔记一
  6. Scrapy运行时出现的错误 :exception.ImportError No module named win32api
  7. centos7.3 防火墙设置
  8. 诺顿企业版10.0 简体中文版
  9. 【Unity 资源分享】☀️ | Unity 超好看的 精品四季蔚蓝自然场景模型 ,让我们离二次元开发更近一步!
  10. 开源项目_C语言学生个人信息管理系统课程设计_chenjie的博客
  11. 创业有感-表达能力很关键
  12. Mobile - 小米手机如何开通应用分身?应用多开?
  13. 【c语言】组合数递归
  14. JAVA多线程基础篇-关键字synchronized
  15. VS code 设置多行注释快捷键
  16. 转载 PCIe学习(三):PCIe DMA关键模块分析之二
  17. 什么是SHA256?比特币是如何应用SHA256算法的?
  18. 用Fabric构建应收账款融资系统的方法
  19. 如何使用CNN进行物体识别和分类_基于CNN目标检测方法(RCNN,FastRCNN,FasterRCNN,MaskRCNN,YOLO,SSD)行人检测...
  20. 网络安全入门学习:社会工程学

热门文章

  1. Dll学习一_Dll 创建并动态引用窗体且释放窗体Demo
  2. Android HAL 层,三个重要的结构体的源码~
  3. python中for和while区别_Python学习第九篇——while和for的区别
  4. 小肚皮最新版本_小肚皮旧版本
  5. android服务器 性能,Android性能优化(中)
  6. 阿里云应用实战-IoT工业数据上云优化实践
  7. sql语句lastupdate使用数据库库函数
  8. mysql 唯一记录_mysql选择唯一记录
  9. hadoop伪分布式搭建 java_hadoop2.2.0伪分布式搭建
  10. php强类型作用,php类、接口、抽象、trait、强类型使用