Рассмотрим таблицу, содержащую 3 DiscountPrograms, с присвоенной порядка расчетаКак рассчитать каскадный сценарий скидок продаж с использованием TSQL?
create table program (programid varchar(5), calc_order tinyint)
go
insert tblprogram(programid, calc_order)
values(prog1, 1)
insert tblprogram(programid, calc_order)
values(prog2, 2)
insert tblprogram(programid, calc_order)
values(prog3, 3)
go
... и таблица продуктов, которые присваивается программировать
create table tblproduct(productid varchar(11), programid varchar(5))
go
insert tblproduct(productid, programid)
values(productabc, prog1)
insert tblproduct(productid, programid)
values(productdef, prog2)
insert tblproduct(productid, programid)
values(productxyz, prog3)
go
... и таблица продаж по продукт
create table tblsales(productid varchar(11), salesamount numeric(18,2))
go
insert tblsales(productid, salesamount)
values(productabc, 150)
insert tblsales(productid, salesamount)
values(productdef, 500)
insert tblsales(productid, salesamount)
values(productxyz, 650)
go
продаж для продукта, принадлежащего prog1 предоставляется скидка в 1%:
.01 * productabcSales
или ...
+0,01 * 150 = 1,50
продаж для продукта, принадлежащего Prog2, предоставляется скидка в размере 1% (продажи минус предыдущей скидки применяемые prog1):
.01 * (. productdefSales - 01 * (productabcSales))
или ...
.01 * (500 - (.01 * 150) = 4.985
Продажи для продукта, принадлежащего prog3, получают скидку в размере 2% против суммы продаж (минус выплаченные prog2 минус (выплата по prog1)):
.02 * (.. productxyzSales - (01 * (productdefSales - (01 * productabcSales))))
или ...
.02 * (650- (. 01 * (500 - (.01 * 150))))) = 12.9003
Я думаю, что должен быть простой способ сделать это, не создавая связку временных таблиц? Может быть, CTE ?? Кроме того, в игре может быть любое количество программ ...
Я создал скрипт SQL, хотя теперь я не думаю, что у меня есть время, чтобы попытаться ответить на вопрос. :) http://sqlfiddle.com/#!3/51142 –
Да, CTE должен иметь возможность обрабатывать скидки рекурсивно. – HABO
Как вы их определили, нет никакой реальной необходимости обрабатывать их по порядку. – RBarryYoung