2013-02-26 180 views
1

我有这样的一个客户折扣表: enter image description here计算折扣

我有一个名为@Total一个deceared varialbe存储总量

declare @Total numeric (12,2) 

set @Total = (select Sum(LaborAmt) from #Data 
       group by Co) 

我需要编写一个查询,得到正确的根据@Total的折扣率。这就是意味着它应该返回2,如果我的总量是350万

SELECT  dbo.budCustomerDisc.Customer, dbo.budCustDiscRate.DiscountRate 
FROM   dbo.budCustDiscRate INNER JOIN 
        dbo.budCustomerDisc ON dbo.budCustDiscRate.DiscountID = dbo.budCustomerDisc.DiscountId AND dbo.budCustDiscRate.JBCo = dbo.budCustomerDisc.JBCo 
WHERE  (dbo.budCustomerDisc.Customer = 165) ......... 

对不起,我只是不知道有写它

+0

发布您的表格结构和期望的结果,我们可能会使这更容易。 – sgeddes 2013-02-26 19:20:29

回答

1

这里的关键是,你正在寻找它返回@Total落在BegBillAmt和EndBillAmt之间时的值。您希望它返回正确的DiscountRate。为此,我们需要一个BETWEEN语句或两个语句,一个检查BegBillAmt和一个检查EndBill Amt的语句。我要说明两个:使用BETWEEN

第一:

SELECT  dbo.budCustomerDisc.Customer, dbo.budCustDiscRate.DiscountRate 
FROM   dbo.budCustDiscRate INNER JOIN 
       dbo.budCustomerDisc ON dbo.budCustDiscRate.DiscountID = dbo.budCustomerDisc.DiscountId AND dbo.budCustDiscRate.JBCo = dbo.budCustomerDisc.JBCo 

WHERE (dbo.budCustomerDisc.Customer = 165) AND @TOTAL BETWEEN BegBillAmt AND EndBillAmt 

有时之间还不清楚(赫克我不知道它是SQL Server的支持外,或像有一个情况下,他们是数据库字段,而比静态变量)。所以这里是两个检查:

SELECT  dbo.budCustomerDisc.Customer, dbo.budCustDiscRate.DiscountRate 
FROM   dbo.budCustDiscRate INNER JOIN 
       dbo.budCustomerDisc ON dbo.budCustDiscRate.DiscountID = dbo.budCustomerDisc.DiscountId AND dbo.budCustDiscRate.JBCo = dbo.budCustomerDisc.JBCo 


WHERE (dbo.budCustomerDisc.Customer = 165) AND BegBillAmt >= @Total AND EndBillAmt <= @Total 

希望这有助于澄清事情给你。

+0

我有四种不同的discountRate,使用不同的begbillAmt和EndBillAmt无法绑定多部分标识符“budCustomerDisc.Customer”。 – 2013-02-26 19:23:58

+0

@ user1723572你的内部连接不正确或缺失。我已经用完整的查询更新了我的答案。这两个都应该做你需要的。 – 2013-02-26 19:33:53

+0

非常感谢你。它确实有效。今天我的思想就停止工作。 :) – 2013-02-26 19:47:09

2
SELECT budCustomerDisc.Customer, budCustDiscRate.DiscountRate 
FROM  budCustDiscRate 
INNER JOIN dbo.budCustomerDisc ON dbo.budCustDiscRate.DiscountID = dbo.budCustomerDisc.DiscountId AND dbo.budCustDiscRate.JBCo = dbo.budCustomerDisc.JBCo 
WHERE  budCustomerDisc.Customer = 165 
      And BegBillAmt <= @Total 
      And EndBillAmt >= @Total 
+0

无法绑定多部分标识符“budCustomerDisc.Customer”。 – 2013-02-26 19:26:29

+0

@ user1723572注意不同的表名称。此查询缺少内部联接。 – 2013-02-26 19:36:04