我有数据库,包括工作号码,预定日期和预定时间,例如:
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
语句复制记录,直到达到天数。
任何人都可以提供更好的主意吗?
答案 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并在现有表格中添加一天,直到达到日期限制...