我还在学习SQL,我在徘徊,如何将行值传递给cross apply
查询中的函数。
假设这是我的第一张表
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的记录。
我很感激有关此事的任何暗示。
答案 0 :(得分:5)
您可以使用APPLY
执行行式操作。 CROSS APPLY
的行为与INNER JOIN
相似,而OUTER APPLY
则与LEFT JOIN
相似。
Table-Valued-Function 返回一个表。您必须提供别名并将此结果集包含在列列表中:
SELECT [Project]
,[emp_id]
,[Allocation_start]
,[Allocation_end]
,WeekDates.*
From First_table
CROSS APPLY dbo.[udf_GetIntervals]([Allocation_start],[Allocation_end]) AS WeekDates
答案 1 :(得分:3)
select *
from First_table cross apply [udf_GetIntervals]([Allocation_start],[Allocation_end])