问题标签 [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 投票
1 回答
1325 浏览

sql - 使用 Cross apply 和 UNION ALL 结果循环遍历表

尝试编写一个行为类似于foreach

询问 :

数据将如下所示:

继续查询:

上面的查询将只针对Quartile = 1 我如何使其适用于 1 到 n 并合并所有结果。

#SetValuesTable 中的数据将如下所示:

结果(预期输出)应如下所示

继续查询:

上述两个陈述需要很长时间。特别是用于排序的 Last 内连接需要很长时间。我认为使用交叉应用可能会大大减少执行时间。

0 投票
1 回答
388 浏览

sql - 与其他列交叉应用

我有两张桌子 1. #SetValuesTable2.#labelTempTab

中的数据#SetValuesTable如下所示:

中的数据#labelTempTab如下所示:

我需要这样的结果表:

询问 :

上述查询将导致:

一些人也可以帮助我获得其余的列。

注意:我尝试使用 UNPIVOT 解开表格,但性能不太好。使用交叉应用,性能非常好。

0 投票
1 回答
2058 浏览

sql-server - 将 T-SQL 交叉应用转换为 Oracle

我希望将这个使用交叉应用的 SQL Server (T-SQL) 查询转换为 Oracle 11g。Oracle 直到 12g 才支持 Cross Apply,所以我必须找到解决方法。查询背后的想法是对于 = 'Foobar' 的每个 Tab.Name,我需要找到具有相同 ID 的前一行的名称,该 ID 由 Tab.Date 排序。(此表包含 1 个具有不同名称和日期的 ID 的多行)。

这是 T-SQL 代码:

从技术上讲,我能够使用 LEFT JOIN 和 LAG() 函数在 Oracle 中重新创建相同的功能:

问题在于它执行 Oracle 查询的顺序。它将从 Tab 中拉回所有行,对它们进行排序(因为 LAG 函数),然后在将其连接到主查询时使用 ON 语句将它们过滤掉。该表有数百万条记录,因此对每个 ID 这样做是不可行的。基本上,我想更改子查询中的操作顺序,只为单个 ID 拉回行,对这些行进行排序以找到前一个,然后加入。关于如何调整它的任何想法?

TL;DR SQL Server:过滤器、订单、连接 Oracle:订单、过滤器、连接

0 投票
1 回答
146 浏览

sql-server - 交叉应用范围不可见?

目前我有一个udf返回一个table. 它返回3行。每行返回parameter's value *10

像(伪)这样的东西:

好的。

现在,在我的代码中,我执行以下操作:

请注意多种用法:

在此处输入图像描述

好的。所以我被告知要使用 Cross apply ,所以我这样做了:

所以让我们举一个真正简单的例子:

我有这 3 行数据:

所以让我们使用交叉应用:

但是这里有2个错误我不知道如何解决:

问题 #1

  • 它无法识别子句中的 myCrossApply EXISTS

在此处输入图像描述

我该如何解决这个问题?

问题2

  • 此外,由于交叉应用,行被重复

例如(让我们删除 unknown exists 子句以显示第二个问题):

在此处输入图像描述

我该如何解决这个问题?

我只是不希望每次都重新计算 UDF,所以他们建议使用交叉应用。

0 投票
1 回答
84 浏览

sql - 交叉应用用法

我可能不明白CROSS APPLY的完整用法,所以我希望有人能帮我解决这个问题。

表格如下所示:

MARK -表有这样的数据:

如果在ACCOUNT_DAY(例如 2 月)上进行范围选择,我想要的结果看起来像 - 这通过ID连接表:

使用MARK_TIME字段下方的代码时,显示错误数据。我必须在某处使用JOIN才能正确吗?

0 投票
1 回答
43 浏览

sql-server-2008 - 为什么交叉应用是给出所有行而不是前 N

我有一张桌子

我想从上表中获得前 2 名。这可以通过row_number()函数来​​完成。但它也应该适用于交叉应用。但是我下面提到的代码是给出所有行而不是前 2 分。

你能告诉我上面的代码有什么问题吗?

0 投票
0 回答
74 浏览

asp.net - 在 SQL 和报表查看器中应用运算符

我有一个尝试从报表查看器调用的存储过程,但出现以下错误

底层 SP 使用 apply 运算符来连接函数和表。我该如何修复错误?

0 投票
5 回答
6057 浏览

sql-server - 如何对多行使用交叉应用?

我有这张桌子:

在此处输入图像描述

我想显示每一行,Times时间:

所以我知道,如果我Cross apply这样写:

然后每行将显示 2 次。

在此处输入图像描述

但我不想要 2 次。我想要Times时间

问题

我怎样才能增强我的查询来做到这一点?

注意:

我想到的一个非智能解决方案是创建一个Times为参数创建行的udf n- 然后在Cross Apply我简单地做:select * from udf_toTable(Times)

0 投票
1 回答
909 浏览

performance - SQL Using Cross Apply 使查询运行非常缓慢

下面的查询需要 35 秒才能完成,所以前端应用程序抛出“超时过期”错误,我通过增加 CommandTimeOut 来修复,但我的审阅者不接受修复,因为修复必须在 sql 查询中完成。

下面是我的 sql 查询

下面是函数

我找不到可以改变和提高性能的地方。

0 投票
1 回答
1849 浏览

sql-server - 将动态表列反透视为键值行

我需要解决的问题是从一个具有许多动态字段的表到其他结构化键值表的数据传输。第一个表来自另一个系统的数据导出,具有以下结构(它可以有任何列名和数据):[UserID],[FirstName],[LastName],[Email],[How was your day] ,[您想收到每周简报吗],[确认您已年满 18 岁] ...

第二个表是我要放置数据的地方,它具有以下结构:[UserID uniqueidentifier],[QuestionText nvarchar(500)],[Question Answer nvarchar(max)]

我看到很多例子展示了如何取消透视表,但我的问题是我不知道表 1 会有哪些列。我可以以某种方式动态地对第一个表进行反透视,因此无论它有什么列,它都会转换为键值结构并将数据导入第二个表。

我将非常感谢您对此的帮助。