sql - 将名称添加到周列表
问题描述
如何从另一个具有名称的表中将每周的名称列表添加到查询中(按 id 顺序重复)
Weeknumb
不同于id
SELECT DATEPART(wk,DATEADD(wk,t2.number,'2019')) as Weeknumb
, DATEADD(wk, DATEDIFF(wk, 4, '01/01/' + '2019')
+ (DATEPART(wk,DATEADD(wk,t2.number,'2019'))-1), 4) AS StartOfWeek
, DATEADD(wk, DATEDIFF(wk, 4, '01/01/' + '2019')
+ (DATEPART(wk,DATEADD(wk,t2.number,'2019'))-1), 11) AS EndOfWeek
FROM master..spt_values t2
WHERE t2.type = 'P'
AND t2.number <= 255
AND YEAR(DATEADD(wk,t2.number,'2019'))=2019
结果:
| Weeknumb | StartOfWeek | EndOfWeek |
|----------|----------------------|----------------------|
| 1 | 2019-01-04T00:00:00Z | 2019-01-11T00:00:00Z |
| 2 | 2019-01-11T00:00:00Z | 2019-01-18T00:00:00Z |
| 3 | 2019-01-18T00:00:00Z | 2019-01-25T00:00:00Z |
| 4 | 2019-01-25T00:00:00Z | 2019-02-01T00:00:00Z |
| 5 | 2019-02-01T00:00:00Z | 2019-02-08T00:00:00Z |
| 6 | 2019-02-08T00:00:00Z | 2019-02-15T00:00:00Z |
| 7 | 2019-02-15T00:00:00Z | 2019-02-22T00:00:00Z |
| 8 | 2019-02-22T00:00:00Z | 2019-03-01T00:00:00Z |
| 9 | 2019-03-01T00:00:00Z | 2019-03-08T00:00:00Z |
| 10 | 2019-03-08T00:00:00Z | 2019-03-15T00:00:00Z |
| 11 | 2019-03-15T00:00:00Z | 2019-03-22T00:00:00Z |
我还有一张有名字的桌子
| id | name |
|----|------|
| 1 | a |
| 2 | b |
| 3 | c |
需要:
| Weeknumb | StartOfWeek | EndOfWeek | Name
|----------|----------------------|----------------------|-------
| 1 | 2019-01-04T00:00:00Z | 2019-01-11T00:00:00Z | a
| 2 | 2019-01-11T00:00:00Z | 2019-01-18T00:00:00Z | b
| 3 | 2019-01-18T00:00:00Z | 2019-01-25T00:00:00Z | c
| 4 | 2019-01-25T00:00:00Z | 2019-02-01T00:00:00Z | a
| 5 | 2019-02-01T00:00:00Z | 2019-02-08T00:00:00Z | b
| 6 | 2019-02-08T00:00:00Z | 2019-02-15T00:00:00Z | c
| 7 | 2019-02-15T00:00:00Z | 2019-02-22T00:00:00Z | a
| 8 | 2019-02-22T00:00:00Z | 2019-03-01T00:00:00Z | b
| 9 | 2019-03-01T00:00:00Z | 2019-03-08T00:00:00Z | c
| 10 | 2019-03-08T00:00:00Z | 2019-03-15T00:00:00Z | a
| 11 | 2019-03-15T00:00:00Z | 2019-03-22T00:00:00Z | b
解决方案
这是你的想法:
select a.Weeknumb
, a.StartOfWeek
, a.EndOfWeek
, b.name from (
SELECT case when ((ROW_NUMBER() OVER (ORDER BY DATEPART(wk,DATEADD(wk,t2.number,'2019'))) % (select count(1) from testTable2))) = 0 then 3
else ((ROW_NUMBER() OVER (ORDER BY DATEPART(wk,DATEADD(wk,t2.number,'2019'))) % (select count(1) from testTable2)))
end br
, DATEPART(wk,DATEADD(wk,t2.number,'2019')) as Weeknumb
, DATEADD(wk, DATEDIFF(wk, 4, '01/01/' + '2019') + (DATEPART(wk,DATEADD(wk,t2.number,'2019'))-1), 4) AS StartOfWeek
, DATEADD(wk, DATEDIFF(wk, 4, '01/01/' + '2019') + (DATEPART(wk,DATEADD(wk,t2.number,'2019'))-1), 11) AS EndOfWeek
FROM master..spt_values t2
WHERE t2.type = 'P'
AND t2.number <= 255
AND YEAR(DATEADD(wk,t2.number,'2019'))=2019) a
left join ( select ROW_NUMBER() OVER (ORDER BY id ) rn, name from testTable2)b
on (a.br = b.rn)
这是演示
推荐阅读
- python - 如何解决 Mac OS Mojave 上的 pip install gevent 错误?
- haskell - 将 Coq 提取到 Haskell
- arduino - Arduino vl53l0x 传感器
- java - 检索一个 Akka actor,如果它不存在则创建它
- azure - 我应该为稀有语言构建自己的 NLP 引擎,还是为聊天机器人(azure、GCP)和翻译使用云服务?
- python - 使用 pandas 将 CSV 保存到字典中,并将列表作为值
- scala - Circe:强制可选字段为“null”
- sql - SQL 语法字母数字字符,SQL Server
- amazon-web-services - API-Gateway 和 Lambda 部署:Lambda 函数的权限无效
- python - 动态过滤熊猫数据帧时出现KeyError