如果你能帮助我,我真的很感激。我需要的是在一个特定范围内创建每个日期,这是通过以下查询完成的。但是我需要为每一行分配这个范围日期。
--Dates in rage
SELECT DATEADD(DAY, nbr - 1, '2016-02-08')
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY c.object_id) AS Nbr
FROM sys.columns c
) nbrs
WHERE nbr - 1 <= DATEDIFF(DAY, '2016-02-08', '2016-02-11')
Table_A
Jhon
JhonB
JhonC
Table_Calendar (2016-02-08 / 2016-02-11)
2016-02-08
2016-02-09
2016-02-10
2016-02-11
UNION
JHON 2016-02-08
JHON 2016-02-09
JHON 2016-02-10
JHON 2016-02-11
JHONB 2016-02-08
JHONB 2016-02-09
JHONB 2016-02-10
JHONB 2016-02-11
感谢您的帮助
答案 0 :(得分:1)
你已经完成了范围的一半。正如肖恩所指出的,当你没有关系时,你需要应用交叉连接/交叉申请,尽管每个人都有不同的用法。
with cte
as
(
SELECT DATEADD(DAY, nbr - 1, '2016-02-08') as dates
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY c.object_id) AS Nbr
FROM sys.columns c
) nbrs
WHERE nbr - 1 <= DATEDIFF(DAY, '2016-02-08', '2016-02-11')
)
select
* from cte
cross join
yourtable
---使用数字的另一个版本
declare @rangestartdate datetime
set @rangestartdate=getdate()-10
declare @rangeenddate datetime
set @rangeenddate=getdate()
;with cte
as
(
select
dateadd(day,n,@rangestartdate)
from dbo.numbers
where n<datediff(day,@rangestartdate,@rangeenddate)
)
select * from cte
cross join
yourtable
您可以通过不同的方式填充数字表here及其用途