Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算折扣_Sql - Fatal编程技术网

Sql 计算折扣

Sql 计算折扣,sql,Sql,我有这样一个客户折扣表: 我有一个名为@Total的递减变量来存储总金额 declare @Total numeric (12,2) set @Total = (select Sum(LaborAmt) from #Data group by Co) 我需要写一个查询,根据@Total得到正确的折扣率。这意味着如果我的总金额是3500000,它应该返回2 SELECT dbo.budCustomerDisc.Customer, dbo.budCustD

我有这样一个客户折扣表:

我有一个名为@Total的递减变量来存储总金额

declare @Total numeric (12,2)

set @Total = (select Sum(LaborAmt) from #Data
              group by Co) 
我需要写一个查询,根据@Total得到正确的折扣率。这意味着如果我的总金额是3500000,它应该返回2

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) .........
对不起,我只是不知道要写它

选择budCustomerDisc.Customer,budCustDiscRate.Discentrate
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 
从布达拉 在dbo.budcusterDiscrate.DiscountID=dbo.budcusterDisc.DiscountID和dbo.budcusterDiscrate.JBCo=dbo.budcusterDisc.JBCo上内部联接dbo.budcusterDisc 其中budCustomerDisc.Customer=165 和BegBillAmt=@Total
这里的关键是,当@Total介于BegBillAmt和EndBillAmt之间时,您希望它返回一个值。您希望它返回正确的折扣。为此,我们需要一个BETWEEN语句或两个语句,一个用于检查BegBillAmt,另一个用于检查EndBill Amt。我将说明这两个方面:

第一次使用在:

 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
选择dbo.budCustomerDisc.Customer、dbo.budCustDiscRate.discentrate
从dbo.budcustrate内部联接
dbo.budcusterDiscrate.DiscountID=dbo.budcusterDisc.DiscountID和dbo.budcusterDiscrate.JBCo=dbo.budcusterDisc.JBCo上的dbo.budcusterDisc

其中(dbo.budCustomerDisc.Customer=165)和BegBillAmt>=@Total和EndBillAmt发布您的表结构和所需结果,我们可能会使这更容易。我有四种不同的折扣,不同的BegBillAmt和EndBillAmt多部分标识符“budCustomerDisc.Customer”无法绑定。@user1723572您的内部联接不正确或丢失。我已经用完整的查询更新了我的答案。这两个都可以满足你的需要。非常感谢你。它确实有效。今天我的大脑停止工作了无法绑定多部分标识符“budCustomerDisc.Customer”。@user1723572请注意不同的表名。此查询缺少内部联接。