首页 > 解决方案 > 在没有循环的 SQL 中创建年/季度表

问题描述

我有一个开始年份和一个结束年份,例如 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

似乎它应该很简单,除了依赖循环或 UNION 的有些笨重的方法或简单地将值手动插入表中之外,我什么都没有想到。

标签: sqlsql-servertsql

解决方案


只是另一种选择......一个与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])

退货

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

推荐阅读