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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java Code Geeks Andygene Web原型

大家好, 我们很高兴地宣布,一组Maven原型的第一个版本已经发布!!! 该集合的目的是提供可以满足各种开发需求的项目模板。 您可以在本文末尾找到JCG路线图。 该第一个发行版旨在提供项目模板-Web应用程序的体系结构。 …

关于如何用od反汇编win32 控制台程序

*********************************************************** 如何用od反汇编win32 控制台程序(类似dos程序)呢?*********************************************************** 注:od是用来调试win32程序的 1.反编译win32 控制台程序&…

Chrome/Chromium HTML5 video 视频播放硬件加速

Chromium站点上有个大致的框图。描写叙述了Chromium的video在各个平台 - 包含Android - 上是怎样使用硬件资源来做视频编解码加速的: 而依据Android Kitkat上的Chromium代码分析,HTML5 video播放硬件加速,终于是使用MediaCodec.java来利用本地…

.net mvc结合微软提供的FormsAuthenticationTicket登陆

一、Web.config <system.web><compilation debug"true" targetFramework"4.5" /><httpRuntime targetFramework"4.5" /><authentication mode"Forms"><forms loginUrl"/Sign/SignIn" defaultUrl…

vc6.o--fatal error C1010错误的解决

当编译c文件时&#xff0c;出错信息为&#xff1a;fatal error C1010: unexpected end of file while looking for precompiled header directive 解决方案&#xff1a; 1、如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的&#xff0c;则AltF7进入当前工程的…

具有Java 7中自动资源管理功能的GC

这篇文章简要概述了Java 7中引入的称为自动资源管理或ARM的新功能。 文章探讨了ARM如何减少开发人员为有效释放分配的资源的JVM堆而必须编写的代码。 Java编程语言中编程的最甜蜜之处之一是对象取消分配的自动处理。 在Java世界中&#xff0c;这通常被称为垃圾收集。 基本上&am…

PHP学习笔记(六)

《Wordpress 50个过滤钩子》 1-10 过滤钩子是一类函数&#xff0c;wordpress执行传递和处理数据的过程中&#xff0c;在针对这些数据做出某些动作之前的特定点执行。本质上&#xff0c;就是在wordpress输出之前&#xff0c;将对浏览数据做出反应。 添加过滤钩子&#xff1a; ad…

JS 操作 radio input(cc问卷管理)

1、选中特定的单选按钮 function showDetail(content){$("input[name^radio]").removeAttr("checked");for(var i0;i<content.length;i){$("#radio"(i1)content.substr(i,1)).attr("checked","checked");} }2、手动添加问…

国内外著名黑客杂志

国外黑客杂志&#xff1a; 《phrack》黑客杂志 http://www.phrack.org 《phrack》创刊于80年代&#xff0c;是世界级的顶级黑客杂志&#xff0c;每年只有一期&#xff0c;现已出了65期&#xff0c;国人似乎至今只有三人在上面发表发表文章&#xff0c;三人好像都是绿盟的人&…

团体项目随笔

我们的团体项目不仅在在课堂上讨论了很久&#xff0c;课后也是几经讨论。每个人都有不同的想法我特别想做一个基于Web编写的驴客网&#xff0c;因为基于个人需求&#xff0c;在最终的讨论中被毙掉。 我们组最终的的讨论结果是写个游戏&#xff0c;关于游戏的发展&#xff0c;这…

Apache Lucene拼写检查器的“您是不是要”功能

Google的“您是不是要”功能 在上一篇文章中对Lucene进行了介绍之后 &#xff0c;现在是时候提高它&#xff0c;创建一个更复杂的应用程序了。 您肯定最熟悉Google的“您是不是要”功能&#xff08;其他搜索引擎也支持此功能&#xff09;。 这是一个例子&#xff1a; Lucene …

Android-做个性化的进度条

1.案例效果图 2.准备素材 progress1.png(78*78) progress2.png(78*78) 3.原理 采用一张图片作为ProgressBar的背景图片(一般采用颜色比较浅的)。另一张是进度条的图片(一般采用颜色比较深的图片)。进度在滚动时&#xff1a;进度图片逐步显示&#xff0c;背景图片逐…

汇编小记16/3/27

最后更新2016-03-27 21:05:06 [address]与[bx] [address] 在debug中mov ax,[0] 等价于mov ax,ds:[0] [0]表示内存偏移地址 但是在masm汇编解释器中&#xff0c;mov ax,[0] 等价于mov ax,0 [0]表示常量0 [bx] mov ax,[bx] 表示 bx存放的数据为一个偏移地址&#xff0c;段…

ConcurrentLinkedHashMap v 1.0.1发布

大家好&#xff0c;我们发布了并发LinkedHashMap实现的1.0.1版本。 在最新版本中&#xff0c;已进行了一些较小的修改&#xff0c;以在多个线程遍历映射的元素时提高性能。 最新版本还引入了可插拔驱逐策略。 当然&#xff0c;您可以实现自定义逐出策略&#xff0c;也可以将它…

BOMbing The System

roy g bivFebruary 2011 [Back to index] [Comments (0)] What is a BOM? Why should we care? Great, can we do that? Okay, lets do it! Unicode in files Greets to friendly people (A-Z) What is a BOM? Its not the thing that explodes. Thats a BOMB. Heh. BO…

鸟哥的linux私房菜学习笔记 ---第7章-2

1,文件内容查阅的命令: cat ,tac nl,more, less,head,tail ,od 文件的查阅参数,显示行号如何显示行号 nl 中的所有参数都是关于如何显示行号的 这里面less的功能更多,更灵活 :空格 下一页 pageup上一页 pagedown 下一页 /string 字符串查询 ?string 反向字符串查询 man的命…

HDU - 4497 GCD and LCM

题意&#xff1a;给出三个数的gcd,lcm&#xff0c;求这三个数的全部的可能 思路 &#xff1a;设x,y,z的gcd为d&#xff0c;那么设xd*a&#xff0c;yd*b&#xff0c;zd*c。a&#xff0c;b。c肯定是互质的。那么lcmd*a*b*c,所以我们能够得到a*b*clcm/gcdans,将ans分解因数后&…

Java Lambda语法替代

关于lambda-dev邮件列表的讨论已经开始解决lambdas /函数文字的Java语言语法应该是什么样的问题。 让我们看一个稍微平凡的例子&#xff0c;然后尝试弄清楚问题。 Perl的人有一个很好的例子&#xff0c;说明以某种功能性的方式使用函数引用–他们称其为Schwartzian变换&#xf…

浅析SMC技术

今天让我们来看Win32ASM里面的高级一点的技术——SMC&#xff08;当当当当……&#xff09;&#xff01;&#xff01;&#xff01;SMC是什么意思&#xff1f;它的英文名叫“Self Modifying Code”&#xff0c;顾名思义&#xff0c;就是“代码自修改”&#xff08;&#xff1f;&…

JAVA基础--程序是顺序执行的

class Testa {public static void main(String[] args) {String aa"aaa";String bb"bbb"aa;aa"cccc";System.out.println(bb);} } 输出的是 “bbbaaa class Testa {public static void main(String[] args) {String aa"aaa";String …