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 这种情况的 

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

  1. 8第八章CTE递归及分组汇总高级部分(多维数据集)(转载)

    8第八章CTE递归及分组汇总高级部分(多维数据集) 这里贴图太麻烦...算了 UNION 等集合操作符: UNION 等以第一个 SELECT  的 列明 作为 整个结果集的列明,整个结果集 唯一认可 ...

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

    本文出处:http://www.cnblogs.com/wy123/p/5960825.html 我们在做开发的时候,有时候会需要一些帮助数据,必须需要连续的数字,连续间隔的时间点,连续的季度日期等等 ...

  3. MongoDB分组汇总操作,及Spring data mongo的实现

    转载请在页首注明作者与出处 一:分组汇总 1.1:SQL样例 分组汇总的应用场景非常多,比如查询每个班级的总分是多少,如果用关系形数据库,那么sql是这样子的 ),class from score g ...

  4. TSql CTE 递归原理探究

    CTE是如何进行递归的?产生递归的条件有三个,分别是 初始值 自身调用自身 结束递归的条件 1,示例代码 ;with cte as ( as jd union all as jd from cte ) ...

  5. gridpanel分组汇总

    [ExtJS5学习笔记]第三十节 sencha extjs 5表格gridpanel分组汇总 2015-05-31     86 本文地址:http://blog.csdn.net/sushengmi ...

  6. Grid分组汇总

    Ext.onReady(function () {                Ext.define('personInfo', {                    extend: 'Ext. ...

  7. SQL 递归查询,意淫CTE递归的执行步骤

    今天用到了sql的递归查询.递归查询是CTE语句with xx as(....)实现的. 假如表Category数据如下. 我们想查找机枪这个子分类极其层次关系(通过子节点,查询所有层级节点).以下是 ...

  8. tidyverse|数据分析常规操作-分组汇总(sumamrise+group_by)

    | 本文首发于 “生信补给站” https://mp.weixin.qq.com/s/tQt0ezYJj3H7x3aWZmKVEQ 使用tidyverse进行简单的数据处理: 盘一盘Tidyverse ...

  9. 高级Linux运维工程师必备技能(扫盲篇)

    高级Linux运维工程师必备技能(扫盲篇) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在了解文件系统之前,我们要学习一下磁盘存储数据的方式,大家都知道文件从内存若要持久化存储的 ...

随机推荐

  1. BZOJ2105: 增强型LCP

    2105: 增强型LCP Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 366  Solved: 86[Submit][Status] Descrip ...

  2. Hadoop RPC简单实例

    1.导入Hadoop-Common-2.6.0.jar导入工程,里面的IPC实现RPC需要的文件. 2.服务器端  (1)服务接口 package com.neu.rpc.server; /** * ...

  3. Spark SQL JSON数据处理

    背景   这一篇可以说是“Hive JSON数据处理的一点探索”的兄弟篇.   平台为了加速即席查询的分析效率,在我们的Hadoop集群上安装部署了Spark Server,并且与我们的Hive数据仓 ...

  4. java.lang.Comparable接口

    转自:http://blog.csdn.net/zccst/article/details/5092920 java.lang.Comparable 接口 作者: zccst java.lang.Co ...

  5. DevExpress gridControl控件动态绑定列 zt

    DataTable dt = =Query.GetCustome=(ref customColumnCount); //绑定列 gridView.Columns.Add(}); gridView.Co ...

  6. Devexpress之DateEdit学习,可选择日期时 zt

    DateEdit默认是是值只可以选择日期的,下面就来看看怎么设置可以选择时间. 代码如下. 设置以下属性 dateEdit1.Properties.VistaDisplayMode = DevExpr ...

  7. lfs遇到的一些问题--编制LFS

    1.chroot后不要再打开新的终端了,没法用,还可能使系统崩溃.另外如果需要去睡觉,重启后要再次挂载并填充/dev和挂载虚拟内核文件系统,并再次运行chroot,可以将下列命令保存为脚本,重启后一次 ...

  8. use isSubstring to check if one word is a rotation of another.

      1: /// <summary> 2: /// Assume you have a method isSubstring which checks if one word is a s ...

  9. Sicily1317-Sudoku-位运算暴搜

    最终代码地址:https://github.com/laiy/Datastructure-Algorithm/blob/master/sicily/1317.c 这题博主刷了1天,不是为了做出来,AC ...

  10. JAVA Web项目的编码过滤器

    首先写一个EncodeFilter的过滤类: package com.djtu.wy.common; import java.io.IOException;import javax.servlet.F ...