SQL Server自动生成介于两者之间的所有年份并重复每年的值

时间:2018-02-12 14:36:34

标签: sql-server sql-server-2008

我试图生成两个数字之间的所有年份,如2000年和2010年,每年,我需要在第二列中有一组重复值。 例如;

Year       Value
2000       Spring Term
2000       Fall Term
2001       Spring Term
2001       Fall Term

它应该持续到2010年。我可以使用以下脚本生成两个数字之间的年份:

; with  CTE as
    (
    select  year('2006') as yr
    union all
    select  yr + 1
    from    CTE
    where   yr < year('2013')
    )   
    select  yr  from    CTE

但是,我无法生成每年的重复值。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

快速而“肮脏”的方式是使用LEFT-JOIN

;with CTE
as (
    select year('2006') as yr   
    union all
    select yr + 1
    from CTE
    where yr < year('2013')
    )
select yr
    , r.term
from CTE
left join (
    select 'Spring Term' [term]
    union all
    select 'Fall Term'
    ) r on 1 = 1;

或使用CROSS JOIN

;with CTE
as (
    select year('2006') as yr   
    union all
    select yr + 1
    from CTE
    where yr < year('2013')
    )
select yr
    , r.term
from CTE
cross join (
    select term
    from (
        values ('Sprint Term'), ('Fall Term')
        ) as tbl(term)
    ) r;