我有一张日历事件表。我正在尝试编写一个查询,对于每一行,返回事件及其后天数的 3 个计算行。
例如,如果我的表如下所示:
事件 | 人们 |
---|---|
生日 | 10 |
圣诞节 | 15 |
美国独立日 | 10 |
我正在尝试构建一个返回类似以下内容的查询:
事件 | 人们 | 天 |
---|---|---|
生日 | 10 | 1 |
生日 | 8 | 2 |
生日 | 7 | 3 |
圣诞节 | 15 | 1 |
圣诞节 | 13 | 2 |
圣诞节 | 12 | 3 |
美国独立日 | 10 | 1 |
美国独立日 | 8 | 2 |
美国独立日 | 7 | 3 |
我不是 SQL 初学者,但之前我还没有遇到过必须在单个语句中生成附加行的情况。有人能指出我正确的方向吗?我不知道我是否需要循环或 CTE 或第二个表或从哪里开始。
根据您提供的有限信息,有很多方法可以解决您的问题。一种方法是创建一个临时数字表
Days
(也许它已经作为数据库中的具体表存在?♂️),然后将其交叉连接到您的CalendarEvents
表,如下所示:People
这假设描述预期结果数据集中的列的函数是People - Day
,但第一天除外,它只是People
。很难说这是否适用于您的整个数据集,仅提供了有限的示例。(请随意解释实际功能是什么。)当然,
#Days
如果您还需要显示更多天数,则需要将更多行加载到临时表中。您也可以使用的日期列表的替代来源是日期维度表(它对许多其他问题有全局帮助),或者基于使用窗口ROW_NUMBER()
函数的现有表的 CTE,如下所示: