问题标签 [common-table-expression]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2456 浏览

stored-procedures - 在 DB2 存储过程中使用递归 CTE

我需要在存储过程中运行递归 CTE,但我无法通过它: SQL0104N 在“SET count=count+1;”之后发现了一个意外的标记“with”。预期的标记可能包括:“”。第 26 行。

我的 google-fu 显示了几个类似的主题,但没有一个具有分辨率。

查询在存储过程之外按预期运行,所以我希望有一些我缺少的语法糖可以让它工作。同样,proc 在没有查询的情况下编译和工作。

这是一个人为的例子:

-

0 投票
4 回答
236907 浏览

tsql - 结合 INSERT INTO 和 WITH/CTE

我有一个非常复杂的 CTE,我想将结果插入到物理表中。

以下内容有效吗?

我正在考虑使用一个函数来创建这个允许我重用的 CTE。有什么想法吗?

0 投票
1 回答
5727 浏览

sql-server-2005 - T-SQL CTE 错误:锚点和递归部分之间的类型不匹配

当我尝试执行特定的递归 CTE 时出现以下错误:

这是无稽之谈。每个字段都显式转换为VARCHAR(MAX). 请帮我。我已经在这里和其他地方阅读了很多关于这个问题的答案,所有这些答案都建议明确地选择有问题的列。我已经这样做了,但仍然得到错误。

此代码将重现错误:

如果您发现它相关,则SELECT left(@@VERSION, 70)返回:

0 投票
1 回答
1856 浏览

sql - 这个公用表表达式的结果被计算了多少次?

我正在尝试解决我们在上一次测试迭代中发现的错误。它涉及使用公用表表达式的查询。该查询的主要主题是它模拟“第一个”聚合操作(获取此分组的第一行)。

问题是查询似乎在某些情况下完全任意选择行 - 来自同一组的多行被返回,一些组完全被淘汰。但是,它总是选择正确的行数。

我创建了一个最小的例子来发布在这里。有客户和地址,以及定义它们之间关系的表。这是我正在查看的实际查询的一个非常简化的版本,但我相信它应该具有相同的特征,并且它是一个很好的示例,可以用来解释我认为出了什么问题。

该查询旨在获取所有客户端及其第一个地址(ID 最低的地址)。在我看来,它应该可以工作。

我有一个关于为什么它有时不起作用的理论。CTE 后面的语句在两个地方引用了 CTE。如果 CTE 是不确定的,并且它运行不止一次,则 CTE 的结果在它所引用的两个地方可能会有所不同。

在我的示例中,CTE 的 RowNo 列使用 ROW_NUMBER() 和 order by 子句,在多次运行时可能会导致不同的排序(我们按地址排序,客户端可以按任何顺序执行,具体取决于查询的执行方式)。

因此,CTE 和 CTE2 是否可能包含不同的结果?还是 CTE 只执行一次,我需要在别处寻找问题吗?

0 投票
2 回答
2076 浏览

sql - Sql For Xml Path 获取节点数

我正在尝试使用“For Xml Path”T-SQL 从列中生成逗号分隔的值列表。这似乎工作得很好,但问题是我想计算逗号分隔列表中的项目。这是我用来生成逗号分隔列表的代码示例:

这给出了预期的结果 1,2,3,但是没有办法得到有 3 个项目的计数。任何添加计数的尝试只会将其添加到 xml。我将此代码与 cte 结合以获取计数:

有没有更简单/更干净的方法来获取节点数而不使用 CTE?有人指出,您可以在内部选择内部和外部复制 from 子句,但这需要保持 from 子句同步。我想同时获得列表和计数,但只写一次 from 子句。

0 投票
1 回答
30223 浏览

sql-server - 在 SQL Server 中结合 CTE“WITH”和“WITH XMLNAMESPACES....”

有没有人设法在 SQL Server 的 T-SQL 中创建一个包含WITH XMLNAMESPACES声明的 CTE?

似乎这两个WITH关键字都坚持成为“T-SQL 批处理中的第一个”,但这并没有真正起作用....

我试过了:

没用:-((语法错误)

消息 156,级别 15,状态 1,第 2 行
关键字“WITH”附近的语法不正确。
消息 319,级别 15,状态 1,第 2 行
关键字“with”附近的语法不正确。如果此语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,则前面的语句必须以分号结束。

所以我尝试在第二个前面WITH加上分号:

得到了这个:

消息 102,级别 15,状态 1,第 2 行
';' 附近的语法不正确。

然后我尝试将其WITH XMLNAMESPACES放入 CTE:

得到了这个:

消息 156,级别 15,状态 1,第 4 行
关键字“WITH”附近的语法不正确。
消息 319,级别 15,状态 1,第 4 行
关键字“with”附近的语法不正确。如果此语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,则前面的语句必须以分号结束。
消息 102,级别 15,状态 1,第 21 行
')' 附近的语法不正确。

那么我该怎么做呢?

0 投票
3 回答
252 浏览

sql-server - 如何将以下代码转换为 SQL Server/T-SQL CTE?

我认为自己对 T-SQL 相当精通,而且我通常能够很好地优化查询而不会失去可读性。简而言之:我喜欢我的 SQL 简短、描述性、声明性和优雅。

虽然以下代码有效,但我有两个问题:

  1. 我正在使用游标,我无法摆脱我脑后的感觉,即使用 CTE 可以更有效地完成它。游标在视图中也不起作用,因此我无法在客户端或依赖 SQL 中操作结果/范围。
  2. 该代码是在存储过程中实现的,这会导致与上述相同的问题。特别是使用 LInQ to SQL 和自动分页。

因此,鉴于以下 SP,是否有人看到任何明显的方法可以使用递归 CTE 将其转换为普通选择?我试过了,失败了,我想我会看看堆栈溢出社区可能会想出什么。

由于它可能并不完全明显,因此我在这里尝试做的类似于以下准 SQL

基本上是为了得到最后一个唯一的引用(不是唯一的行),它通常包含重复项,并且按降序排列。这绝对是棘手的地方。

数据是非常简单的 HTTP 日志。ID 字段只是一个唯一的行标识符,Url 是完整的 url requesten,Referer 是该请求的 HTTP referer。任何值都不能为空,但referer 可以为空(即'')。IsSiteLocal 只是一个简单的过滤功能,用于排除来自我自己网站的引用者。

如果有人想要一些样本数据,我可以上传一个小的数据库备份,这样你就有一些东西可以玩弄了。

样本数据可以在这里找到: http ://svada.kjonigsen.net/files/IISLogsDBBackup.zip

0 投票
2 回答
57 浏览

sql-server - 为什么我的结果不一致?

我有以下正在处理的存储过程。我注意到,每 5 次或 6 次刷新结果时,都会有新的值出现。考虑到数据处于静态环境中,此时没有人对数据进行任何更改,我真的无法理解。有人可以告诉我为什么我会看到不同的结果,即使我使用完全相同的参数运行此过程。我什至在查询分析器中尝试过,仍然看到同样奇怪的结果。

我在 Sql 2008 中运行。

这是过程:

0 投票
1 回答
245 浏览

sql-server - CTE 连接在组迭代中缺少第一行

我正在尝试将多行值连接成单行...我已经实现了非常接近,但意识到下面的查询每次都错过了第一行...我在这里遗漏了一些明显的东西吗?我以前从未使用过 CTE,所以我正在努力理解它背后的概念。提前致谢。

0 投票
2 回答
29183 浏览

sql - SQL CTE 和 ORDER BY 影响结果集

我在下面粘贴了一个非常简化的 SQL 查询版本。我遇到的问题是该ORDER BY语句正在影响我的 CTE 的选择结果。我一直无法理解为什么会这样,我最初的想法是在 CTE 中,我执行一些SELECT语句,然后ORDER BY应该对这些结果起作用。

不幸的是,我看到的行为是我的内心SELECT陈述受到 order by 的影响,给了我不在TOP 10.

以下是数据示例:(按 ID 倒序索引)


我的基本查询:

查询返回:


我的查询ORDER BY

查询返回:

谁能解释为什么第一个查询将只返回表前 10 的 ID,而第二个查询返回整个表的前 10(在应用排序之后)。