2011-01-20 143 views
1

我有一个相当大的SPROC我正在努力。那么,就我而言,由于我在相当一段时间内没有编写SQL,所以它的规模很大。无论如何,我想使这个Update语句工作:帮助一个简单的SQL查询

update @salesCommission 
set LineAmountWithCashDiscount = (LineAmount - ((LineAmount/ (
    select SUM(LineAmount) 
    FROM @salesCommission 
    WHERE InvoiceNumber='00072766')) * CashDiscountAmount)) 

我的问题是,我需要更换:

WHERE InvoiceNumber =“00072766”

子句,以便发票数量不硬编码。相反,它应该是正在更新的当前行的发票号码。

任何人都可以告诉我如何重新编写此更新查询,以便它为正在更新的当前行选择LineAmount的总和?

+0

这是SQL Server吗?我认为@salescommission是一个表变量? – RichardTheKiwi 2011-01-20 21:46:09

+0

是@salescommission是一个表变量 – 2011-01-20 21:52:45

回答

3
update S 
SET LineAmountWithCashDiscount = S.LineAmount - (S.LineAmount/I.Total) * CashDiscountAmount 
FROM @salesCommission S 
inner join 
(
select InvoiceNumber, 
    CASE WHEN SUM(LineAmount) = 0 THEN 1 ELSE SUM(LineAmount) END as Total 
from @salesCommission 
group by InvoiceNumber 
) I on I.InvoiceNumber = S.InvoiceNumber 

编辑:案件转“总”变成1时0是绕过#DIV/0错误

0

如果你是完全是由触发器调用的存储过程执行此操作。 ..

 
update @salesCommission 
set LineAmountWithCashDiscount = 
(LineAmount - ((LineAmount/ (select SUM(LineAmount) 
FROM @salesCommission WHERE InvoiceNumber=(Select InvoiceNumber from Inserted) 
)) * CashDiscountAmount))