首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

那些年我们写过的T-SQL(中篇)

中篇的重点在于,在复杂情况下使用表表达式的查询,尤其是公用表表达式(CTE),也就是非常方便的WITH AS XXX的应用,在SQL代码,这种方式至少可以提高一倍的工作效率。...本系列包含上中下三篇,内容比较驳杂,望大家耐心阅读: 那些年我们写过的T-SQL(上篇):上篇介绍查询的基础,包括基本查询的逻辑顺序、联接和子查询 那些年我们写过的T-SQL(中篇):中篇介绍表表达式、...元数据查询类型 解释示例 UNION [ALL], INTERSECT, EXCEPT SELECT country, region, city FROM address UNION SELECT country...透视/逆透视解决方案 解释示例 标准透视 相信大家都很熟悉这种写法,因为面试中经常问到 SELECT empid, SUM(CASE WHEN custid = 'A' THEN qty END)...WHERE qty IS NOT NULL 逆透视包括也包括三个逻辑阶段:第一阶段需要通过交叉联接生成每一列对应的一个副本;第二阶段通过CASE运算符生成列(qty);最后一个阶段通过去qty IS

3.7K70
您找到你想要的搜索结果了吗?
是的
没有找到

《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

不过,假设现在要求要按下表所示的的格式来生成输出结果: ?   这时,我们就需要进行透视转换了!   ...(2)需求说明   要求执行你透视转换,为每个员工和客户组合返回一行记录,其中包含这一组合的订货量。期望的输出结果如下图所示: ?   ...(3)标准SQL进行逆透视转换   Step1.生成副本:CROSS JOIN 交叉联接生成多个副本   Step2.提取元素:通过CASE语句生成qty数据列   Step3.删除不相关的交叉:过滤掉...UPDATE dbo.T1 SET col1 = col2, col2 = col1;   ② 基于联接的UPDATE语句:同样不是SQL标准语法,联接在此基于联接的DELETE一样是起到过滤作用...这种处理方式使用基于集合的查询相反,普通的查询是把集合作为一个整体来处理,不依赖任何顺序。   换句话说,使用游标,就像是用鱼竿钓鱼,一次只能勾到一条鱼一样。

8.9K20

SQL高级查询方法

如果外部查询的 WHERE 子句包括列名称,它必须查询选择列表中的列是联接兼容的。 ntext、text 和 image 数据类型不能用在子查询的选择列表中。...因为由 EXISTS 引入的子查询创建了存在测试并返回 TRUE 或 FALSE 而非数据,所以其规则标准选择列表的规则相同。...联接条件 WHERE 和 HAVING 搜索条件相结合,用于控制从 FROM 子句所引用的基表中选定的行。 比如下列联接因为是内部联接,因此也可以改写为在WHERE条件中指定联接。...CTE 派生表类似,具体表现在不存储为对象,并且只在查询期间有效。派生表的不同之处在于,CTE 可自引用,还可在同一查询中引用多次。 CTE 可用于: 创建递归查询。...可以在用户定义的例程(如函数、存储过程、触发器或视图)中定义 CTECTE 由表示 CTE 的表达式名称、可选列列表和定义 CTE查询组成。

5.7K20

记录下关于SQL Server的东西

CTE之所以与其他表表达式不同,是因为它支持递归查询: 定义一个递归CTE,至少需要两个查询(或者更多),第一个查询称为定位点成员(anchor member),第二个查询称为递归成员(recursive... member),基本格式如下: 定位点成员只是返回有效关系结果表的查询用于非递归查询类似,定位点成员查询只被执行一次。...递归成员是一个引用了CTE名称的查询,对CTE名称的引用表示查询在一个执行序列中逻辑上的“前一个结果集”,第一次调用递归成员时,它表示的就是定位点成员的查询结果,之后调用递归时,引用CTE则代表前一次调用所返回的结果集...在返回的查询结果上,两个成员必须保持一直(列的属性); 例如: 定位点成员对HR.Employees表中empid=2的结果进行查询,这个查询只执行一次; 递归成员则对CTE(前一次查询的结果集)和Employees...数据库透视转换:所谓透视转换(pivoting)就是把数据从行的状态转化为列的状态,当然对应的还有逆透视转换(unpivoting):就是数据从列的状态转化为行的状态。

1.3K10

SQLServer中的CTE通用表表达式

这些聚合数据可能会将 Customers、Orders 和 Order Details 表联接在一起,以计算订单的总和以及平均值。此外,您可能想要查询聚合的行集。...视图通常用来分解大型的查询,以便用更易读的方式来查询它们。例如,一个视图可以表示一个 SELECT 语句,该语句会将 10 个表联接起来,选择许多列,然后根据涉及的一组逻辑来过滤行。...接着就能像表或视图一样查询或者联接它。图 2 中的代码解决的查询图 1 所解决的相同,但使用的是派生表而不是视图。尽管只能在派生表所在的语句中访问它们,但是,表通常使查询变得更难以阅读和维护。...通过 UNION 将第一个查询递归查询结合起来。 确保存在没有行会被返回的情况(这是终止检查)。...第二个查询定义,即递归成员,定义了一个返回定位点成员相同的列和数据类型的查询。递归成员还检索接下来将被用于递归回调到 CTE 的值。查询的结果通过 UNION 语句结合在一起。

3.8K10

sparksql源码系列 | 生成resolved logical plan的解析规则整理

CTESubstitution Substitution fixedPoint 根据以下条件,使用节点进行分析,并用CTE参考或CTE定义替换子计划:1.如果处于传统模式,或者如果查询是SQL命令或DML...对于每个主查询和子查询,此替换后未内联的所有CTE定义都将分组在一个`WithCTE`节点下。任何不包含CTE或已内联所有CTE的主查询或子查询显然都不会有任何`WithCTE`节点。...“WithCTE”节点中的CTE定义按解析顺序保存。这意味着,根据CTE定义对任何有效CTE查询的依赖性,可以保证CTE定义按拓扑顺序排列(即,给定CTE定义A和B,B引用A,A保证出现在B之前)。...join策略hint计划节点将插入到指定名称匹配的任何关系(别名不同)、子查询或公共表表达式的顶部。hint解析的工作原理是递归遍历查询计划,找到指定关系别名之一匹配的关系或子查询。...这条规则将会:1.按名称写入时对列重新排序;2.数据类型不匹配时插入强制转换;3.列名不匹配时插入别名;4.检测输出表不兼容的计划并引发AnalysisException ExtractWindowExpressions

3.6K40

《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

WHERE region N'WA' OR region IS NULL;   另外,T-SQL对于NULL值得处理是先输出NULL值再输出非NULL值得顺序,如果想要先输出非NULL值,则需要改变一下排序条件...2.2 联接查询   (1)交叉联接:返回笛卡尔积,即m*n行的结果集 -- CROSS JOIN select c.custid, e.empid from sales.Customers as c...比如,假如你要写一条内联接查询,如果不小心忘记了指定联接条件,如果这时候用的是ANSI SQL-92语法,那么语法分析器将会报错。 ?   ...举个栗子,下面的代码定义了一个名为USACusts的CTE,它的内部查询返回所有来自美国的客户,外部查询则选择了CTE中的所有行: WITH USACusts AS ( select custid...总结: 借助表表达式可以简化代码,提高代码地可维护性,还可以封装查询逻辑。 当需要使用表表达式,而且不计划重用它们的定义时,可以使用派生表或CTE派生表相比,CTE更加模块化,更容易维护。

1.9K51

你真的会玩SQL吗?和平大使 内连接、外连接

之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接、外连接 你真的会玩SQL吗?三范式、数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节点的方法 你真的会玩SQL吗?...透视转换的艺术 你真的会玩SQL吗?冷落的Top和Apply 你真的会玩SQL吗?实用函数方法汇总 你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(上) 你真的会玩SQL吗?...但是如果在交叉联接中加入where 子句就相当是内联接     例: SELECT title, pub_name FROM titles Cross JOIN publishers...内联接 仅显示两个联接表中的匹配行的联接。(这是查询设计器中的默认联接类型。)...期望的输出(按简略格式显示): */ custid companyname orderid orderdate ----------- --------------- ----

1.2K80

Seal-Report: 开放式数据库报表工具

LINQ查询:使用LINQ查询的强大功能连接和查询任何数据源(SQL、Excel、XML、OLAP多维数据集、HTTP JSon等)。...原生数据透视表:只需将元素直接拖放到数据透视表(交叉选项卡)中,并将其显示在报表中。 HTML 5图表:用鼠标点击两次即可定义和显示图表系列(支持ChartJS、NVD3和Plotly库)。...NuGet软件包可以简化现有项目的集成。 Mongo DB的本机支持。 可以看看在线演示Web报表服务器:https://sealreport.org/demo。...报表由数据源、模型、视图和可选的任务、输出和计划组成。该报告还可以引用存储库中的视图模板。 数据源包含数据库连接、表、联接和列的说明。 模型定义如何从单个 SQL 语句生成结果集(数据表)和序列。...可以定义输出和计划以自动生成报告(例如,每天早上发送电子邮件)。 可以定义任务来执行 SQL 或脚本任务。 HTML 报表 报表设计器 Web 报表服务器

2.2K20

你真的会玩SQL吗?表表达式,排名函数

透视转换的艺术 你真的会玩SQL吗?冷落的Top和Apply 你真的会玩SQL吗?实用函数方法汇总 你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(上) 你真的会玩SQL吗?...2.公用表表达式(CTE) 非递归公用表表达式(CTE)是查询结果仅仅一次性返回一个结果集用于外部查询调用。...JOIN CTE_Test AS b    --第二次引用   ON a.Id = b.Id   ORDER BY a.Id DESC --SELECT * FROM CTE_Test 再查询一次会报错...现在使用CTE查询其每个栏目是第几层栏目的代码如下: WITH COL_CTE(Id,Name,ParentId,tLevel ) AS ( --基本语句 SELECT Id,Name,...在order by子句中定义的列上,如果返回一行数据另一行具有相同的值,rank函数将给这些行赋予相同的排名数值。在排名的过程中,保持一个内部计数值,当值有所改变时,排名序号将有一个跳跃。

1.8K90

PostgreSQL 教程

EXCEPT 返回第一个查询中未出现在第二个查询输出中的行。 第 6 节. 分组集、多维分组和汇总 主题 描述 分组集 在报告中生成多个分组集。...子查询 主题 描述 子查询 编写一个嵌套在另一个查询中的查询。 ANY 通过将某个值查询返回的一组值进行比较来检索数据。 ALL 通过将值查询返回的值列表进行比较来查询数据。...EXISTS 检查子查询返回的行是否存在。 第 8 节. 公共表表达式 主题 描述 PostgreSQL CTE 向您介绍 PostgreSQL 公共表表达式或 CTE。...使用 CTE 的递归查询 讨论递归查询并学习如何在各种上下文中应用它。 第 9 节....主题 描述 将 CSV 文件导入表中 向您展示如何将 CSV 文件导入表中。 将 PostgreSQL 表导出到 CSV 文件 向您展示如何将表导出到 CSV 文件。

42810

基础很重要~~04.表表达式-上篇

(2)所有的列必须有名称 (3)所有的列必须是唯一的 当表表达式的查询联接了两个表,而这两个表存在名称相同的列时,就会出现相同名称的列,如果要使表达式有效,则必须使这两个表的列名不一样。...扩展后,方案一类似。 一般来说,表表达式既不会对性能产生正面影响,也不会对性能产生负面影响。 3.使用参数 在派生表的查询中,可以引用参数。...本题分两个步骤: 1.可以先查询出每个雇员的订单的最大日期,生成派生表O1 2.O1Sales.Orders表进行关联,查询出每个雇员处理过的订单日期等于最大的订单日期的所有订单。...CTE和派生表相关具有以下优势: 如果要在一个CTE中引用另一个CTE,不须要像派生表那样进行嵌套,只需要在同一个WITH字句中定义多个CTE,并用逗号把它们分隔开。...每个CTE可以引用在它前面定义的所有CTE,而外部查询则可以引用所有CTE

1.5K120

如何利用永洪自服务数据集,构建强大的数据处理能力?

自服务数据集可进行一个或多个数据集之间的联接,联合,逆透视,去重以及分组和汇总等操作,只需要通过拖拽和可视化操作就可以进行数据处理和整合,十分简单便捷,能够很大的提高效率,无论是 IT 人员还是业务人员都可以很快上手操作...只能有一个输出,镜像节点除外,能连接的镜像节点可以是(n>1)个。 (2)转换节点:分为 抽样,排序,透视表,逆透视表,分组和汇总,自循环列,镜像,去重。通过转换节点,可对表中的数据进行相应的处理。...3.以联接功能为例,将需要连接的数据集拖拽到编辑区,拖拽“联接”操作到编辑区,系统将自动对数据集和联接节点进行连线。如果系统没有自动连线,也可以对数据集和操作进行手动连线。...两个数据集进行联接操作时,默认的是“内部联接”的联接方式,并会自动匹配联接列。本例中,联接方式为“内部联接”,联接列为“订单ID”,即将两张表订单ID相同的数据组合在一起,如下图所示。...如果需要使用左联接等其他的联接方式,只需在联接对话框中,设置所需的联接方式和联接列。 5.数据集结果展示 数据集结果节点 ,数据集结果节点是所有节点数据处理的终结点,数据集结果节点只能有一个输入。

75110

基础很重要~~04.表表达式-下篇

下载脚本文件:TSQLFundamentals2008.zip 一、视图 1.视图和派生表和CTE的区别和共同点 区别: 派生表和CTE不可重用:只限于在单个语句的范围内使用,只要包含这些表表达式的外部查询完成操作...共同点: 在很多方面,视图和内联表值函数的处理方式都类似于派生表和CTE。当查询视图和内联表值函数时,SQL Server会先扩展表表达式的定义,再直接查询底层对象。...如果想防止这种视图的查询过滤条件相冲突的修改,只须在定义视图的查询语句末尾加上WITH CHECK OPTION即可: ALTER VIEW [Sales]....,返回每个雇员每年处理过的连续总订货量 期望的输出: ?...(1,'2008') 内联表值函数也可以用在联接查询中: 下面的例子是用内联表值函数HR.Employees表进行关联,查询出客户id=1,订单日期年份=2008的所有订单,以及处理对应订单的员工详情

1.2K160

用Excel获取数据——不仅仅只是打开表格

首先,我们分别建立了针对三张表的查询,如图4所示。 ? 图4 新建源数据的查询 第二步开始设置表B的查询,点开设置面板后,单击“合并查询”按钮,如图5所示。 ?...图5 应用合并查询 第三步,在“合并查询”的设置面板中,选好两张表对应的键,即“用户ID”,然后在“联接种类”中选择“左外部(第一个中的所有行,第二个中的匹配行)”,这就是一个“LEFT JOIN”,...图6 合并中设置匹配列和联接种类 单击“确定”按钮后,查询设置界面上出现一个“NewColumn”,如图7所示,点开它右边的按钮,在下拉列表框中选择要匹配进表B的字段,选择“用户姓名”、“所在区域”、...图8 新的合并中再次设置匹配列和联接种类 ? 图9 完成合并后的效果 经过上述步骤,不同的表建立查询后,作为数据源的表一旦有变动,我们只要右键单击查询设置页面中上方的“刷新”按钮,数据就会更新。...在工作中,作者会根据分析需求,先用查询工具将各个来源的表连接成一个主表;然后由这个主表做透视表和数据透视图,数据透视表的数据源就是引用整张表对象,而不是一个区域。这样能实现数据报表的半自动化。

2.4K10
领券