sql - 在没有循环的 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 的有些笨重的方法或简单地将值手动插入表中之外,我什么都没有想到。
解决方案
只是另一种选择......一个与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
推荐阅读
- signalr - Azure signalR 服务处于无服务器模式,不允许服务器连接
- r - R:在某些坐标处从栅格更改值
- asp.net - 发生 IIS Web 服务错误 - 可能与 CORS 相关
- airflow - 气流在任务之间传输数据,而不在阶段之间存储数据
- python - Python 等价于 R's ... 用于匹配函数参数
- react-native - 测试无法在 React Native 上运行
- php - $_SESSION 在点击提交后显示不反映更改
- docker - Docker 挂起并重新启动后端口卡住
- php - Blade:为 foreach() 提供的参数无效
- python - 匹配两个列表之间的元素,但索引为索引