2011-01-20 3 views
1

У меня довольно большой SPROC, над которым я работаю. Ну, насколько мне известно, насколько я не писал SQL в течение некоторого времени. Во всяком случае, я хочу сделать это обновление заявление работы:Помогите с простым 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

+0

Да @salescommission - переменная таблицы –

ответ

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 

EDIT: Случай, чтобы включить «всего» в 1, когда 0, чтобы обойти # Div/0 ошибок

+0

Я думаю, что это о ней. SPROC изменяет ok, но я получаю деление на ноль в этой части. Я думаю, что иногда сумма может быть равна нулю. –

+0

обновление S SET LineAmountWithCashDiscount = S.LineAmount - (S.LineAmount/I.Total) * CashDiscountAmount ОТ @salesCommission S внутреннее соединение ( выберите InvoiceNumber, случай, когда СУММА (LineAmount) = 0 ТОГДА \t \t \t ИНАЧЕ \t \t \t СУММА (LineAmount) \t КОНЕЦ, как Total из @salesCommission группы по InvoiceNumber ) Я на I.InvoiceNumber = S.InvoiceNumber –

+0

Я модом ваш CYB erkiwi к вышеуказанному комментарию и кажется, что работает. –

0

Если вы делаете это в хранимой процедуре, которая будет вызван триггером. ..

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

Смежные вопросы