By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
declare @pricesDefault table (product_id int, price decimal(20, 4))
insert into @pricesDefault
values
(1, 100),
(2, 120),
(3, 200),
(4, 50)
declare @discountTypeA table (product_id int, modifier decimal(4,2), startdate date, enddate date)
insert into @discountTypeA
values
(1, 0.75, '2019-06-06', '2019-07-06'),
(1, 0.95, '2019-08-06', '2019-08-20'),
(1, 0.92, '2019-05-06', '2019-06-05'),
(2, 0.75, '2019-06-08', '2019-07-19'),
(2, 0.95, '2019-07-20', '2019-09-20'),
(3, 0.92, '2019-05-06', '2019-06-05')
declare @discountTypeB table (product_id int, modifier decimal(4,2), startdate date, enddate date)
insert into @discountTypeB
values
(1, 0.85, '2019-06-20', '2019-07-03'),
(1, 0.65, '2019-08-10', '2019-08-29'),
(1, 0.65, '2019-09-10', '2019-09-27'),
(3, 0.75, '2019-05-08', '2019-05-19'),
(2, 0.95, '2019-05-20', '2019-05-21'),
(3, 0.92, '2019-09-06', '2019-09-09') ;
with prices as (
select a.product_id, v.dte
from @discountTypeA a cross apply
(values (a.startdate), (a.enddate)) v(dte)
union -- on purpose to remove duplicates
select b.product_id, v.dte
product_id | price | a_discount | b_discount | startdate | enddate |
---|---|---|---|---|---|
1 | 92.00000000 | 0.08 | null | 2019-05-06 | 2019-06-05 |
1 | 100.00000000 | null | null | 2019-06-05 | 2019-06-06 |
1 | 75.00000000 | 0.25 | null | 2019-06-06 | 2019-06-20 |
1 | 63.75000000 | 0.25 | 0.15 | 2019-06-20 | 2019-07-03 |
1 | 75.00000000 | 0.25 | null | 2019-07-03 | 2019-07-06 |
1 | 100.00000000 | null | null | 2019-07-06 | 2019-08-06 |
1 | 95.00000000 | 0.05 | null | 2019-08-06 | 2019-08-10 |
1 | 61.75000000 | 0.05 | 0.35 | 2019-08-10 | 2019-08-20 |
1 | 65.00000000 | null | 0.35 | 2019-08-20 | 2019-08-29 |
1 | 100.00000000 | null | null | 2019-08-29 | 2019-09-10 |
1 | 65.00000000 | null | 0.35 | 2019-09-10 | 2019-09-27 |
1 | 100.00000000 | null | null | 2019-09-27 | null |
2 | 114.00000000 | null | 0.05 | 2019-05-20 | 2019-05-21 |
2 | 120.00000000 | null | null | 2019-05-21 | 2019-06-08 |
2 | 90.00000000 | 0.25 | null | 2019-06-08 | 2019-07-19 |
2 | 120.00000000 | null | null | 2019-07-19 | 2019-07-20 |
2 | 114.00000000 | 0.05 | null | 2019-07-20 | 2019-09-20 |
2 | 120.00000000 | null | null | 2019-09-20 | null |
3 | 184.00000000 | 0.08 | null | 2019-05-06 | 2019-05-08 |
3 | 138.00000000 | 0.08 | 0.25 | 2019-05-08 | 2019-05-19 |
3 | 184.00000000 | 0.08 | null | 2019-05-19 | 2019-06-05 |
3 | 200.00000000 | null | null | 2019-06-05 | 2019-09-06 |
3 | 184.00000000 | null | 0.08 | 2019-09-06 | 2019-09-09 |
3 | 200.00000000 | null | null | 2019-09-09 | null |