给定以下源表。
CREATE TABLE prices
(
Style CHAR(10),
Size CHAR(10),
BeginDate DATE,
EndDate DATE,
price DECIMAL(18, 2)
)
INSERT INTO prices
(Style,
Size,
BeginDate,
EndDate,
price)
VALUES ('B100',NULL,'1-10-2010','1-30-2010',-5),
('B101',NULL,'1-10-2010','1-15-2010',-10),
('B102',NULL,'1-10-2010','1-15-2010',-20),
('B100','32x32','1-10-2010','1-15-2010',-1),
('B100','32x34','1-11-2010','1-20-2010',-2),
('B100','32x36','1-01-2010','1-15-2010',-3),
('B100','32x38','1-10-2010','2-15-2010',-4)
CREATE TABLE Products
(
ProductKey INT,
Style CHAR(10),
Size CHAR(10)
)
INSERT INTO Products
(ProductKey,
Style,
Size)
VALUES (1,'B100','32x32'),
(2,'B100','32x34'),
(3,'B100','32x36'),
(4,'B100','32x38'),
(5,'B100','32x40'),
(6,'B101','32x32'),
(7,'B101','32x34'),
(8,'B101','32x36'),
(9,'B101','32x38'),
(10,'B101','32x40'),
(11,'B102','32x32'),
(12,'B103','32x34'),
(13,'B103','32x36'),
(14,'B103','32x38'),
(15,'B103','32x40')
我需要产生以下输出
ProductKey BeginDate EndDate Price
1 1-10-2010 1-15-2010 -1
1 1-16-2010 1-30-2010 -5
2 1-10-2010 1-10-2010 -5
2 1-11-2010 1-20-2010 -2
2 1-21-2010 1-30-2010 -5
etc....
所以价格表是折扣的 SCD。折扣可以应用于款式级别或单个尺寸级别。
尺寸级别折扣覆盖特定时间段的样式级别折扣。无论如何,时间段几乎可以重叠。
这个问题和我一年前问的类似。 我遇到了很大的问题,试图在不使用游标或 while 循环的情况下思考如何做到这一点。
谢谢您的帮助。