在没有循环的情况下在SQL中创建年/季度表

Chr*_*ris 2 sql t-sql sql-server

我有一个开始年份和结束年份,例如2017年和2019年.

我想在我声明的startYear和endYear之间创建一个包含年份季度(例如,1,2,3,4)的表格,并在最终的endYear中设置季度,在2处停止(它始终向前看) .

下面的样本输出.

year    quarter
2017    1
2017    2
2017    3
2017    4
2018    1
2018    2
2018    3
2018    4
2019    1
2019    2
Run Code Online (Sandbox Code Playgroud)

看起来它应该很简单,除了有些笨重的方法依赖于循环或UNION或只是手动将值插入表中,没有任何事情发生在我身上.

Joh*_*tti 7

只是另一种选择......一个特殊的理货表与一个 Cross Join

Declare @Y1 int = 2017
Declare @Y2 int = 2019

Select *
 From ( Select Top (@Y2-@Y1+1) Year=@Y1-1+Row_Number() Over (Order By (Select NULL)) From master..spt_values n1 ) A
 Cross Join (values (1),(2),(3),(4)) B([Quarter])
Run Code Online (Sandbox Code Playgroud)

返回

Year    Quarter
2017    1
2017    2
2017    3
2017    4
2018    1
2018    2
2018    3
2018    4
2019    1
2019    2
2019    3
2019    4
Run Code Online (Sandbox Code Playgroud)

  • 更好,因为在后端,递归CTE也可以被认为是循环. (3认同)