Sql server 批量折扣问题

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

假设以下问题圆盘=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        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等。

请提供示例输入和输出数据。事实上,很难弄清你在问什么