Sql server 批量折扣问题
假设以下问题圆盘=0 qty1=20 qty1disc5 qty2=22 qty2disc=7 qty3=24 qty3disc=9 qty4=26 qty4disc=11 qty5=30 qty5disc=13 以下内容适用于该senario,但假设客户决定仅转到2级,并且qty3-qty5=0。我需要系统确认数量是最大数量,这是应用的折扣。如果折扣字段有一个值,则不应用卷折扣,并忽略该值Sql server 批量折扣问题,sql-server,volume,Sql Server,Volume,假设以下问题圆盘=0 qty1=20 qty1disc5 qty2=22 qty2disc=7 qty3=24 qty3disc=9 qty4=26 qty4disc=11 qty5=30 qty5disc=13 以下内容适用于该senario,但假设客户决定仅转到2级,并且qty3-qty5=0。我需要系统确认数量是最大数量,这是应用的折扣。如果折扣字段有一个值,则不应用卷折扣,并忽略该值 DECLARE @qty INT = 24; SELECT tblCustomerSpe
DECLARE @qty INT = 24;
SELECT tblCustomerSpecialsSet.tblCustomerSpecials_tblCustomer, tblCustomerSpecialDetailsSet.tblCustomerSpecialDetails_tblProducts,
tblCustomerSpecialDetailsSet.Price,
case
when tblCustomerSpecialDetailsSet.Disc <> 0 then tblCustomerSpecialDetailsSet.Disc
when @qty >= qty1 AND @qty < qty2 then qty1DiscPerc
when @qty >= qty2) and @qty < qty3 then qty2DiscPerc
when @qty >= qty3 and @qty < qty4 then qty3DiscPerc
when @qty >= qty4 and @qty < qty5 then qty3DiscPerc
when @qty >= qty5 then qty5DiscPerc
else 0
end as disc,
tblTaxes.TaxPercentage,tblProductsSet.Cost
FROM tblCustomerSpecialsSet INNER JOIN
tblCustomerSpecialDetailsSet ON tblCustomerSpecialsSet.Id = tblCustomerSpecialDetailsSet.tblCustomerSpecialDetails_tblCustomerSpecials INNER JOIN
tblProductsSet ON tblCustomerSpecialDetailsSet.tblCustomerSpecialDetails_tblProducts = tblProductsSet.Id INNER JOIN
tblTaxes ON tblProductsSet.tblProducts_tblTax = tblTaxes.Id
WHERE (tblCustomerSpecialsSet.tblCustomerSpecials_tblCustomer = 6311) AND (tblCustomerSpecialDetailsSet.tblCustomerSpecialDetails_tblProducts =9604) `
只是确认一下——在某些情况下,你可能没有所有的“级别”折扣,所以你不想去所有的级别 这些金额和折扣来自一个表,该表列出了获得折扣所需的金额 例如,您可能有两个项目
Item# | qty1_amt qty1_disc | qty2_amt qty2_disc | qt3_amt qt3_disc
1 | 5 10 | 10 20 | 15 33
2 | 5 10 | 10 20 | NULL NULL
如果有人买了每件20件
他们将获得第1项33%的折扣,因为它高于第3季度的金额
他们只会得到项目2的20%的折扣,因为这是最高的
如果以上是真的,那么我认为你的方法几乎达到了目的
但是,在确定折扣级别时,您需要做的是检查下一级别的折扣是否可用。如果不可用,则采用当前级别
case
when tblCustomerSpecialDetailsSet.Disc <> 0 then tblCustomerSpecialDetailsSet.Disc
when @qty >= qty1 AND (@qty < qty2 OR qty2 IS NULL) then qty1DiscPerc
when @qty >= qty2 AND (@qty < qty3 OR qty3 IS NULL) then qty2DiscPerc
when @qty >= qty3 AND (@qty < qty4 OR qty4 IS NULL) then qty3DiscPerc
when @qty >= qty4 AND (@qty < qty5 OR qty5 IS NULL) then qty4DiscPerc
when @qty >= qty5 then qty5DiscPerc
else 0
end
顺便提一下,您的上述代码中有一些输入错误,例如,额外的括号、QTY4Disperc被写成QTY3Disperc等。请提供示例输入和输出数据。事实上,很难弄清你在问什么