问题标签 [cross-apply]

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 回答
1315 浏览

sql - SQL Server:拆分记录

我有一张这样的桌子:

我想将记录分成如下内容:

如何仅使用 SQL Server执行此操作?

谢谢,

0 投票
1 回答
1563 浏览

xml - 在 SQL Server 2008 中创建索引视图

-

我意识到,事实上,不能为此视图创建索引,因为使用了 CROSS APPLY。任何人都可以为此提出解决方法吗?因为在处理大量 XML 数据时,使用这种没有索引的视图太慢了。

编辑:

有什么办法可以索引 XML 本身吗?

0 投票
1 回答
1602 浏览

sql-server - CROSS APPLY 风格与性能

我应该为每个别名表达式使用单独的 CROSS APPLY 还是在可能的情况下在同一个 CROSS APPLY 中定义多个表达式?

我正在重构代码中生成的许多非常复杂的 SQL 查询(通常是四五页长的十几个 JOIN)。通常它们嵌套了五六个查询,因为某些部分在不同情况下被重用。嵌套查询的一个典型原因是一个查询提取一些值,执行计算,并为该值分配一个别名。然后封闭查询使用别名值等进行进一步计算。这是必要的,因为别名表达式只能在外部查询中引用,而不能在定义它的查询中的其他地方引用。(另一种方法,也存在于代码中,是在整个查询中重复相同的冗长子表达式十几次。)

为了简化这个意大利面条 SQL,我开始使用 CROSS APPLY 折叠这些伸缩查询。通过使用 CROSS APPLY,我可以分配一个别名并在同一查询的其他地方使用它。请注意,我的 CROSS APPLY 子句都没有通过子选择或调用 UDF 引入新表。

一开始,我把很多表达式放在同一个 CROSS APPLY 里。但是,我的代码需要模块化。在不同的情况下将需要不同的字段,因为用户可以为过滤器选择字段,并且我们为不同的列生成相似的统计信息,因此创建许多相似的查询,它们彼此之间只有一点点不同。由于有些字段建立在其他字段之上,而有些则依赖于查询中前面定义的某些 JOIN,因此我不能将所有内容放在同一个 CROSS APPLY 中。因此,CROSS APPLY 的数量可能会有所不同。

此外,从中提取的某些字段被新别名遮蔽并重新定义(通常用于删除 NULL、提供默认值等)。因此,当在其他地方引用 CROSS APPLY 定义的字段时,需要将 CROSS APPLY 的表别名指定为消除歧义。

这样做的结果是,我需要一种合乎逻辑的方式来命名我的 CROSS APPLY,并且我关心性能。如果 CROSS APPLY 的数量发生变化,那么如果 CROSS APPLY 使用简单的计数器进行编号(例如,computed1、computed2 等),那么给定字段可能会看到其名称引用从 computed3.[FIELD NAME] 更改为 computed4.[FIELD NAME],它在查询的其余部分产生连锁反应,可能是通过调用不同的 C# 过程来组装的。这是一个维护问题。

我正在考虑的替代方法是将每个计算表达式放在单独的 CROSS APPLY 中,并且 CROSS APPLY 的名称将从表达式的别名派生。例如:

使用一个 CROSS APPLY:

使用四个 CROSS APPLY:

如果我使用这种多重 CROSS APPLY 方法,我可以轻松生成在添加新应用或删除它们时不会更改的名称,并且我可以在引用字段的代码中预测表别名将是什么。但是,这意味着更多的 CROSS APPLY 语句。性能影响是什么?有没有更好的方法来做到这一点,使用 CROSS APPLY 或其他一些 SQL Server 功能?(我不需要它是跨数据库的,所以只有 Microsoft 的功能就可以了。)

0 投票
4 回答
40812 浏览

sql - Postgres 类似于 SQL Server 中的 CROSS APPLY

我需要将为 MS SQL Server 2005 编写的 SQL 查询迁移到 Postgres 9.1。在此查询
中替代的最佳方法是什么?CROSS APPLY

GetCitizenRecModified()函数是表值函数。我不能放置这个函数的代码,因为它真的很大,计算起来很困难,我不能放弃它。

0 投票
2 回答
105 浏览

.net - 存储过程中的无效 obj 名称

我有一个存储过程,我使用交叉应用从表中获取字段“tagtext”,然后将每个 tagtext 作为条目放在另一个表中名为 Tags 的新字段中。不过,我并不热衷于交叉应用的工作原理,而且似乎遇到了一个错误:无效的对象 myArticles。

我的 sp 中的相关代码是:

然后,我在其中使用 sp 的 Web 服务是:

0 投票
1 回答
1254 浏览

sql - 相当于cross apply和select top

我有表(下面的脚本):

我选择按国家分组的城市,我可以使用两种方法执行查询:

是否有任何没有“交叉应用”的查询可以返回与下面的“应用查询”相同的结果?:

查询:

不行

0 投票
1 回答
8303 浏览

sql - 在 SQL 中提取 XML 数据 - 过多的交叉应用语句

我有一个包含声明详细信息的 xml 文档:

这适用于声明特定细节:

但它需要一个单例,并且只返回第一个值。我需要发票的所有值,而不仅仅是第一个值,所以单例不起作用。

我可以使用这样的交叉应用语句获取信息:

这将返回报表中每个发票的 ID、日期和金额 - 完美。

当我尝试提取所有发票详细信息时,我的问题就出现了。我目前有七个交叉应用语句,我收到以下消息:

“查询处理器耗尽了内部资源,无法生成查询计划。这是一种罕见的事件,仅适用于极其复杂的查询或引用大量表或分区的查询。请简化查询。如果您相信您错误地收到了此消息,请联系客户支持服务以获取更多信息。”

我想要做的是有一个交叉申请发票并缩小选择语句中的确切字段,但除非我使用'。我必须让语句返回一个单例,并且我没有得到我需要的所有数据。

我已经对在 select 语句中指定命名空间进行了一些研究,但是所有示例都将命名空间设置为 http 地址而不是 xml 文档中的节点,并且使用这种方法我还没有得到任何返回。

我正在寻找的结果是这样的,但有更多的发票详细信息:

我应该从这里去哪里?

编辑:我删除了一些不必要的信息。获取所有发票特定的详细信息是我的目标。

0 投票
2 回答
359 浏览

tsql - UDF 缺失结果的交叉应用

我正在执行类似于以下的 SQL 查询

前 85 行的结果看起来很好,第 86 行+对于从 UDF 派生的列总是有 NULL。如果我添加 where 或 order by 子句来更改结果集,则始终是前 85 行返回完整的结果集。因为 85 数字是如此一致,我认为这是我忽略的东西。

任何人都可以提供的任何帮助都会很棒

0 投票
1 回答
3658 浏览

sql - 在连接中使用表值函数

有一个表值函数,它提供多行作为输出,并且有 2 列作为输出。

现在我想在查询employees表中的所有员工时使用这个函数

我正在使用 CROSS APPLY 但它需要很长时间并且没有给出任何结果。

这是我尝试过的查询

0 投票
2 回答
2844 浏览

tsql - 使用带有删除语句的交叉应用的 T-SQL

我有以下表格:

我需要删除不包含在其他表中的 RecordsID 行。请注意,有时 TableOne、TableTwo、TableThree 表之一可能为空,此时不应删除任何记录。

结果表应为:

由于空表,我无法使用 INNER JOIN。而且因为我在函数中使用这些代码,所以我无法创建仅包含带有记录的表的动态 SQL 语句并执行它。

我可以用 IF 语句做到这一点,但在我的实际情况下,我有很多案例要检查,很多表要加入,结果会出现很多代码重复。

这就是为什么我开始想知道有没有办法通过 CROSS APPLY 更聪明、更清洁?