我仍在学习 SQL,我一直在徘徊如何将行值传递给 cross apply
查询中的函数。
假设这是我的第一张 table
SELECT
[Project], [emp_id],
[Allocation_start], [Allocation_end]
FROM
First_table
我有一个函数,它接受 2 个参数 - 开始和结束日期,并返回按周间隔分割的日期......
例子 :
select * from [udf_GetIntervals]('2017-01-01','2017-01-30')
数据:
dt_start dt_end
----------------------
2016-12-26 2017-01-01
2017-01-02 2017-01-08
2017-01-09 2017-01-15
2017-01-16 2017-01-22
2017-01-23 2017-01-29
2017-01-30 2017-02-05
我所做的是运行上述函数,日期从 7 月 1 日到 12 月 30 日,并将其存储在虚拟表中,然后对该表使用交叉应用。
select *
from [First_table]
cross apply
(select * from #temp) b
哪个有效,但它的工作独立于
first_tables
开始和结束日期,始终返回第一个表中每 1 个项目记录的所有周。我想知道如何使用 first_tables start_date 和 end_date 值来执行此操作,以便我的交叉应用仅返回行开始/结束日期中包含 week_intervals 的记录。
我将不胜感激有关此事的任何提示。
最佳答案
您可以使用 APPLY
执行按行操作。 CROSS APPLY
的行为类似于 INNER JOIN
,而 OUTER APPLY
更像 LEFT JOIN
。
表值函数返回一个表。您必须提供别名并将此结果集包含到您的列列表中:
SELECT [Project]
,[emp_id]
,[Allocation_start]
,[Allocation_end]
,WeekDates.*
From First_table
CROSS APPLY dbo.[udf_GetIntervals]([Allocation_start],[Allocation_end]) AS WeekDates
关于SQL Server : run function for each row based on the provided row value,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40780274/