给出下表和数据。
create table prices
(productKey int
,PriceType char(10)
,BeginDate date
,EndDate date
,price decimal(18,2))
insert into prices(productKey, PriceType,BeginDate,EndDate, price)
values
(1,'LIST','1-1-2010','1-15-2010',10),
(1,'LIST','1-16-2010','10-15-2010',20),
(1,'DISCOUNT','1-10-2010','1-15-2010',-5),
(2,'LIST','2-1-2010','10-15-2010',30),
(2,'LIST','10-16-2010','1-1-9999',35),
(2,'DISCOUNT','2-10-2010','10-25-2010',-10),
(2,'LIST','1-1-2010','1-15-2010',10),
(3,'DISCOUNT','1-12-2010','1-1-9999',-5),
(3,'LIST','1-16-2010','1-1-9999',10)
我需要将记录插入到计算每个时间段的实际价格(列表折扣)的同一个表中。
例如,对于产品 1,我应该有以下“实际”记录
Begin End Price
1-1-2010 1-9-2010 10
1-10-2010 1-15-2010 5
1-16-2010 10-15-2010 20
我有点想出在标价范围内开始打折的任何事情,但我对其他任何事情都不知所措。
谢谢您的帮助
编辑
每个 ProductKey 可以有多个折扣,但折扣期不会重叠。所以你可以有一个 2010 年的,另一个 2012 年的,但不能有 2 个 2010 年的。
另外,如果有人能想出一个更好的标题,请这样做。在这一点上,我可怜的大脑完全受到挑战。
编辑2
它是 SQL 服务器 2008R2。我喜欢一个漂亮的基于集合的答案(或者让我朝那个方向开始的人),但也会对有效的光标解决方案感到满意。