SQL查询按天数复制记录

时间:2016-11-14 15:46:26

标签: sql-server

我有数据库,包括工作号码,预定日期和预定时间,例如:

J410 | 11/14/2016 | 50|

我被要求为每天的工作生成一行报告,如下所示:

J410 | 11/14/2016 | 10 |
J410 | 11/15/2016 | 10 |
J410 | 11/16/2016 | 10 |
J410 | 11/17/2016 | 10 |
J410 | 11/18/2016 | 10 |

逻辑是我们假设10小时,所以total number of hours divided by 10 = the number of days,然后用户想要每天一行。

我可以轻松获得这样的天数:

SELECT CEILING(Hours / 10.0) - 请注意,有几个小时不会均匀地划分10,所以我正在四舍五入。

我一点也不知道如何解决每个日期创建(仅报告)额外行的问题。

我最初的想法是选择记录到临时表中,然后选择每条记录并使用WHILE语句复制记录,直到达到天数。

任何人都可以提供更好的主意吗?

2 个答案:

答案 0 :(得分:1)

如果有帮助

Declare @YourTable table (JobNumber varchar(25),Date date,Hours int)
Insert Into @YourTable values
('J410','11/14/2016',50)

;with cte0(N) As (Select 1 From (Values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) N(N))
     ,cteN(N) As (Select Row_Number() over (Order By (Select NULL)) From cte0 N1, cte0 N2, cte0 N3)
Select A.JobNumber
      ,Date = DateAdd(DD,N-1,Date)
      ,Hours = cast(Hours/CEILING(Hours/10.0) as decimal(10,2))
 From  @YourTable A
 Join cteN B on  N<=CEILING(Hours/10.0)

返回

JobNumber   Date        Hours
J410        2016-11-14  10.00
J410        2016-11-15  10.00
J410        2016-11-16  10.00
J410        2016-11-17  10.00
J410        2016-11-18  10.00

答案 1 :(得分:0)

使用Numbers Table并在现有表格中添加一天,直到达到日期限制...