我有多个CTE,我想从其中几个CTE中检索一些信息。
所以,我从其中一个CTE获得了这些信息:
PeriodID StarDate
1 2006-01-01
2 2007-04-25
3 2008-08-16
4 2009-12-08
5 2011-04-017
这来自其他人:
RecordID Date
100 2007-04-15
101 2008-05-21
102 2008-06-06
103 2008-07-01
104 2009-11-12
我需要在下一个节目中展示:
RecordID Date PeriodID
100 2007-04-15 1
101 2008-05-21 2
102 2008-06-06 2
103 2008-07-01 2
104 2009-11-12 3
我可以使用一些case / when语句来定义记录的日期是在1,2,3,4或5期,但在某种情况下,我可以从第一个CTE返回不同数量的句点。
在上述情况下有没有办法做到这一点?
答案 0 :(得分:1)
您可以按如下方式定义多个CTE,然后像对待任何其他表一样选择并加入它们。
with cte1 as (select * ...),
cte2 as (select * ...)
select
cte2.*,
periodid
from cte2
cross apply
(select top 1 * from cte1 where cte2.recorddate> cte1.startdate order by startdate desc) v