次のソース テーブルが与えられます。
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 です。割引は、スタイル レベルまたは個々のサイズ レベルで適用できます。
サイズ レベルの割引は、特定の期間のスタイル レベルの割引よりも優先されます。とにかく、期間はほとんど重複する可能性があります。
この質問は、私が 1 年前に尋ねた質問と似ています。 カーソルやwhileループに頼らずにこれを行う方法に頭を悩ませようとしている大きな問題があります。
助けてくれてありがとう。