我仍在学习SQL,我在徘徊如何将行值传递给cross apply查询中的函数。
假设这是我的第一张桌子
SELECT
[Project], [emp_id],
[Allocation_start], [Allocation_end]
FROM
First_table
Run Code Online (Sandbox Code Playgroud)
我有一个带有2个参数的函数-开始和结束日期,并返回按周间隔分割的日期...
范例:
select * from [udf_GetIntervals]('2017-01-01','2017-01-30')
Run Code Online (Sandbox Code Playgroud)
数据:
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
Run Code Online (Sandbox Code Playgroud)
我所做的是我运行了提到的函数,其日期从7月1日到12月30日开始,并将其存储在虚拟表中,然后与该表交叉应用。
select *
from [First_table]
cross apply
(select * from #temp) b
Run Code Online (Sandbox Code Playgroud)
哪个有效,但它独立于first_tables开始和结束日期而工作,总是从第一个表返回每1个项目记录的所有星期。
我想知道,如何使用first_tables start_date和end_date值执行此操作,以便我的交叉应用仅返回行/结束日期中包含week_intervals的记录。
我希望对此事有任何暗示。
您可以使用APPLYdo执行逐行操作。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
Run Code Online (Sandbox Code Playgroud)
select *
from First_table cross apply [udf_GetIntervals]([Allocation_start],[Allocation_end])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5272 次 |
| 最近记录: |