2016-07-26 60 views
1

我找不到这个问题的具体答案,但是如果之前有问题,我们表示歉意。来自表格的两个日期之间的日期

我有以下示例表,我保持简单,但它包含更多的行和类型。它经常更新。

Type From       To       Qty 
1  2016-01-01 00:00:00.0000000 2016-01-03 00:00:00.0000000 30 
1  2016-01-04 00:00:00.0000000 2016-01-05 00:00:00.0000000 31 
1  2016-01-06 00:00:00.0000000 NULL       31 
2  2016-04-24 00:00:00.0000000 NULL       15 

我希望能够每天更新表(如下图所示),所以它显示了日期之间(含)的所有日期。相关日期的数量必须显示到今天的日期,其中NULL

Type Date       Qty 
1  2016-01-01 00:00:00.0000000 30 
1  2016-01-02 00:00:00.0000000 30 
1  2016-01-03 00:00:00.0000000 30 
1  2016-04-04 00:00:00.0000000 31 
1  2016-04-05 00:00:00.0000000 31 
1  2016-04-06 00:00:00.0000000 31 
1  2016-04-07 00:00:00.0000000 31 
1  .... up to today where TO is NULL 
1  2016-07-25 00:00:00.0000000 31 
2  2016-04-24 00:00:00.0000000 15 
2  .... up to today where TO is NULL 
2  2016-07-25 00:00:00.0000000 15 

非常感谢您的帮助。

+0

你在查询计算'Qty',或者这是储存在你的表? – Siyual

+0

它存储在表中。 – Mally

回答

1

用数字表..

Demo Here

select b.*,qty from #test 
cross apply 
(
select dateadd(day,n,fromdate) from 
numbers 
where n<= 
case when todate is null 
then datediff(day,fromdate,getdate()) else datediff(day,fromdate,todate) end 
) b(upd) 
1

您可以使用递归CTE生成所有日期和JOIN到的结果做到这一点:

测试数据

Create Table Test 
(
    [Type] Int, 
    [From] Date, 
    [To] Date, 
    Qty  Int 
) 

Insert Test 
Values 
(1, '2016-01-01', '2016-01-03', 30), 
(1, '2016-01-04', '2016-01-05', 31), 
(1, '2016-01-06', NULL,   31), 
(2, '2016-04-24', NULL,   15) 

查询

;With MinMax As 
(
    Select Min([From])     MinFrom, 
      Max([To])     MaxTo, 
      Convert(Date, GetDate()) Today 
    From Test 
), Date (Date) As 
(
    Select MinFrom 
    From MinMax 
    Union All 
    Select DateAdd(Day, 1, Date) 
    From Date 
    Where Date < (Select MaxTo From MinMax) 
    Or  Date < (Select Today From MinMax) 
) 
Select T.[Type], 
     D.[Date], 
     T.Qty 
From Test T 
Join Date D On D.Date Between T.[From] And Coalesce(T.[To], Convert(Date, GetDate())) 
Order By T.[Type], D.[Date] 
Option (MaxRecursion 0) 

结果

Type Date  Qty 
1  2016-01-01 30 
1  2016-01-02 30 
1  2016-01-03 30 
1  2016-01-04 31 
1  2016-01-05 31 
1  2016-01-06 31 
1  2016-01-07 31 
1  2016-01-08 31 
1  2016-01-09 31 
1  2016-01-10 31 
1  2016-01-11 31 
1  2016-01-12 31 
1  2016-01-13 31 
1  2016-01-14 31 
1  2016-01-15 31 
1  2016-01-16 31 
1  2016-01-17 31 
1  2016-01-18 31 
1  2016-01-19 31 
1  2016-01-20 31 
1  2016-01-21 31 
1  2016-01-22 31 
1  2016-01-23 31 
1  2016-01-24 31 
1  2016-01-25 31 
1  2016-01-26 31 
1  2016-01-27 31 
1  2016-01-28 31 
1  2016-01-29 31 
1  2016-01-30 31 
1  2016-01-31 31 
1  2016-02-01 31 
1  2016-02-02 31 
1  2016-02-03 31 
1  2016-02-04 31 
1  2016-02-05 31 
1  2016-02-06 31 
1  2016-02-07 31 
1  2016-02-08 31 
1  2016-02-09 31 
1  2016-02-10 31 
1  2016-02-11 31 
1  2016-02-12 31 
1  2016-02-13 31 
1  2016-02-14 31 
1  2016-02-15 31 
1  2016-02-16 31 
1  2016-02-17 31 
1  2016-02-18 31 
1  2016-02-19 31 
1  2016-02-20 31 
1  2016-02-21 31 
1  2016-02-22 31 
1  2016-02-23 31 
1  2016-02-24 31 
1  2016-02-25 31 
1  2016-02-26 31 
1  2016-02-27 31 
1  2016-02-28 31 
1  2016-02-29 31 
1  2016-03-01 31 
1  2016-03-02 31 
1  2016-03-03 31 
1  2016-03-04 31 
1  2016-03-05 31 
1  2016-03-06 31 
1  2016-03-07 31 
1  2016-03-08 31 
1  2016-03-09 31 
1  2016-03-10 31 
1  2016-03-11 31 
1  2016-03-12 31 
1  2016-03-13 31 
1  2016-03-14 31 
1  2016-03-15 31 
1  2016-03-16 31 
1  2016-03-17 31 
1  2016-03-18 31 
1  2016-03-19 31 
1  2016-03-20 31 
1  2016-03-21 31 
1  2016-03-22 31 
1  2016-03-23 31 
1  2016-03-24 31 
1  2016-03-25 31 
1  2016-03-26 31 
1  2016-03-27 31 
1  2016-03-28 31 
1  2016-03-29 31 
1  2016-03-30 31 
1  2016-03-31 31 
1  2016-04-01 31 
1  2016-04-02 31 
1  2016-04-03 31 
1  2016-04-04 31 
1  2016-04-05 31 
1  2016-04-06 31 
1  2016-04-07 31 
1  2016-04-08 31 
1  2016-04-09 31 
1  2016-04-10 31 
1  2016-04-11 31 
1  2016-04-12 31 
1  2016-04-13 31 
1  2016-04-14 31 
1  2016-04-15 31 
1  2016-04-16 31 
1  2016-04-17 31 
1  2016-04-18 31 
1  2016-04-19 31 
1  2016-04-20 31 
1  2016-04-21 31 
1  2016-04-22 31 
1  2016-04-23 31 
1  2016-04-24 31 
1  2016-04-25 31 
1  2016-04-26 31 
1  2016-04-27 31 
1  2016-04-28 31 
1  2016-04-29 31 
1  2016-04-30 31 
1  2016-05-01 31 
1  2016-05-02 31 
1  2016-05-03 31 
1  2016-05-04 31 
1  2016-05-05 31 
1  2016-05-06 31 
1  2016-05-07 31 
1  2016-05-08 31 
1  2016-05-09 31 
1  2016-05-10 31 
1  2016-05-11 31 
1  2016-05-12 31 
1  2016-05-13 31 
1  2016-05-14 31 
1  2016-05-15 31 
1  2016-05-16 31 
1  2016-05-17 31 
1  2016-05-18 31 
1  2016-05-19 31 
1  2016-05-20 31 
1  2016-05-21 31 
1  2016-05-22 31 
1  2016-05-23 31 
1  2016-05-24 31 
1  2016-05-25 31 
1  2016-05-26 31 
1  2016-05-27 31 
1  2016-05-28 31 
1  2016-05-29 31 
1  2016-05-30 31 
1  2016-05-31 31 
1  2016-06-01 31 
1  2016-06-02 31 
1  2016-06-03 31 
1  2016-06-04 31 
1  2016-06-05 31 
1  2016-06-06 31 
1  2016-06-07 31 
1  2016-06-08 31 
1  2016-06-09 31 
1  2016-06-10 31 
1  2016-06-11 31 
1  2016-06-12 31 
1  2016-06-13 31 
1  2016-06-14 31 
1  2016-06-15 31 
1  2016-06-16 31 
1  2016-06-17 31 
1  2016-06-18 31 
1  2016-06-19 31 
1  2016-06-20 31 
1  2016-06-21 31 
1  2016-06-22 31 
1  2016-06-23 31 
1  2016-06-24 31 
1  2016-06-25 31 
1  2016-06-26 31 
1  2016-06-27 31 
1  2016-06-28 31 
1  2016-06-29 31 
1  2016-06-30 31 
1  2016-07-01 31 
1  2016-07-02 31 
1  2016-07-03 31 
1  2016-07-04 31 
1  2016-07-05 31 
1  2016-07-06 31 
1  2016-07-07 31 
1  2016-07-08 31 
1  2016-07-09 31 
1  2016-07-10 31 
1  2016-07-11 31 
1  2016-07-12 31 
1  2016-07-13 31 
1  2016-07-14 31 
1  2016-07-15 31 
1  2016-07-16 31 
1  2016-07-17 31 
1  2016-07-18 31 
1  2016-07-19 31 
1  2016-07-20 31 
1  2016-07-21 31 
1  2016-07-22 31 
1  2016-07-23 31 
1  2016-07-24 31 
1  2016-07-25 31 
1  2016-07-26 31 
2  2016-04-24 15 
2  2016-04-25 15 
2  2016-04-26 15 
2  2016-04-27 15 
2  2016-04-28 15 
2  2016-04-29 15 
2  2016-04-30 15 
2  2016-05-01 15 
2  2016-05-02 15 
2  2016-05-03 15 
2  2016-05-04 15 
2  2016-05-05 15 
2  2016-05-06 15 
2  2016-05-07 15 
2  2016-05-08 15 
2  2016-05-09 15 
2  2016-05-10 15 
2  2016-05-11 15 
2  2016-05-12 15 
2  2016-05-13 15 
2  2016-05-14 15 
2  2016-05-15 15 
2  2016-05-16 15 
2  2016-05-17 15 
2  2016-05-18 15 
2  2016-05-19 15 
2  2016-05-20 15 
2  2016-05-21 15 
2  2016-05-22 15 
2  2016-05-23 15 
2  2016-05-24 15 
2  2016-05-25 15 
2  2016-05-26 15 
2  2016-05-27 15 
2  2016-05-28 15 
2  2016-05-29 15 
2  2016-05-30 15 
2  2016-05-31 15 
2  2016-06-01 15 
2  2016-06-02 15 
2  2016-06-03 15 
2  2016-06-04 15 
2  2016-06-05 15 
2  2016-06-06 15 
2  2016-06-07 15 
2  2016-06-08 15 
2  2016-06-09 15 
2  2016-06-10 15 
2  2016-06-11 15 
2  2016-06-12 15 
2  2016-06-13 15 
2  2016-06-14 15 
2  2016-06-15 15 
2  2016-06-16 15 
2  2016-06-17 15 
2  2016-06-18 15 
2  2016-06-19 15 
2  2016-06-20 15 
2  2016-06-21 15 
2  2016-06-22 15 
2  2016-06-23 15 
2  2016-06-24 15 
2  2016-06-25 15 
2  2016-06-26 15 
2  2016-06-27 15 
2  2016-06-28 15 
2  2016-06-29 15 
2  2016-06-30 15 
2  2016-07-01 15 
2  2016-07-02 15 
2  2016-07-03 15 
2  2016-07-04 15 
2  2016-07-05 15 
2  2016-07-06 15 
2  2016-07-07 15 
2  2016-07-08 15 
2  2016-07-09 15 
2  2016-07-10 15 
2  2016-07-11 15 
2  2016-07-12 15 
2  2016-07-13 15 
2  2016-07-14 15 
2  2016-07-15 15 
2  2016-07-16 15 
2  2016-07-17 15 
2  2016-07-18 15 
2  2016-07-19 15 
2  2016-07-20 15 
2  2016-07-21 15 
2  2016-07-22 15 
2  2016-07-23 15 
2  2016-07-24 15 
2  2016-07-25 15 
2  2016-07-26 15 
+0

优秀!非常感谢你的回答。这些工作完美。 – Mally

相关问题