【发布时间】:2014-03-22 21:23:25
【问题描述】:
使用 SQL Server 2008
我有一个表 A,其中包含开始日期、结束日期和值。对于表 A 中开始日期和结束日期中的每个日期,我需要在表 B 中插入(或更新,如果已经存在)该日期,以便该表中的值是 A/DateDiff 中的值(Day,StartDate A 的结束日期,A 的结束日期).
例子:
表A
ID StartDate EndDate Value
1 01 Jan 2014 03 Jan 2014 33
2 01 Feb 2014 02 Feb 2014 20
3 02 Jan 2014 03 Jan 2014 10
表 B
ID Date Value
1 01 Jan 2014 11
2 02 Jan 2014 16
3 03 Jan 2014 16
4 01 Feb 2014 10
5 02 Feb 2014 10
计算值的方式是 - 对于 ID 1,有 3 天,这意味着每天 11 个单位。所以 1 月 1 日、2 日、3 日都获得 11 个单位。然后因为还有日期范围为 1 月 2 日至 1 月 3 日的附加单位,即每天 5 个单位,1 月 2 日和 3 日将是 (11+5) 16。2 月 1 日和 2 日只有一个记录,所以它们将只是 20/ 2 = 10。
我可以想到一个使用循环的解决方案,但想完全避免它。 有什么方法可以通过基于集合的解决方案来实现吗?使用基于集合的方法批量执行此操作对我来说很重要。
我正在尝试阅读各种文章,似乎 CTE、日历表或 Tally 表可能会有所帮助,但我看到的示例需要设置变量并传递开始日期和结束日期,我认为这适用于单个记录,但不适用于何时一次做所有的记录。请提出建议。
谢谢!
【问题讨论】:
-
你的价值观没有意义。他们不应该是 11、16、33、10、20 吗?
-
计算值的方式是 - 对于 ID 1,有 3 天,这意味着每天 11 个单位。所以 1 月 1 日、2 日、3 日都获得 11 个单位。然后,由于还有日期范围为 1 月 2 日至 1 月 3 日的附加单元,即每天 5 个,1 月 2 日和 3 日将是 16。2 月 1 日和 2 日只有一个记录,所以它们只是 20/2 = 10。跨度>
-
。 .我很想说你应该删除这个问题并从描述重新开始。
-
你的意思是在描述中解释计算?
标签: sql sql-server-2008