从多个CTE动态检索信息

时间:2012-10-22 10:24:39

标签: tsql sql-server-2012 common-table-expression

我有多个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返回不同数量的句点。

在上述情况下有没有办法做到这一点?

1 个答案:

答案 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