2011-01-20 4 views
1

제가 작업하고있는 SPROC이 상당히 큽니다. 글쎄, 꽤 오래 전부터 SQL을 작성하지 않았기 때문에 큰 문제가되었습니다.간단한 SQL 쿼리에 대한 도움말

송장 번호 INVOICENUMBER = '00072766'

절하지 WHERE 있도록 :

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

내 문제는 내가 바꿀 필요가있다 : 어쨌든, 나는이 업데이트 문 작품을 만들고 싶어 하드 코딩 됨. 대신 현재 업데이트되는 행의 인보이스 번호 여야합니다.

업데이트중인 현재 행에 대한 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 

편집 : 0 주위 # 사업부/0 오류

+0

입니다. 이것에 관한 것입니다. SPROC가 변경되었지만이 부분에서는 0으로 나눕니다. 때로는 합계가 0 일 수 있다고 생각합니다. –

+0

업데이트 S SET LineAmountWithCashDiscount S.LineAmount = - (S.LineAmount/I.Total) * S @salesCommission FROM CashDiscountAmount 내측 가입 ( 선택 INVOICENUMBER, CASE WHEN THEN SUM (LineAmount) = 0 \t \t ELSE \t I.InvoiceNumber = S.InvoiceNumber –

+0

에 \t SUM (LineAmount) INVOICENUMBER 에 의해 @salesCommission 그룹에서 총 로 \t END) 나는 당신이 CYB modded하게 \t \t 에리 위 (erkiwi)가 위의 코멘트에 올랐으며 작동하는 것으로 보인다. –

0

당신이 트리거에 의해 호출되는 것 저장 프로 시저에서이 작업을 수행하는 경우를 얻을 때이 사건은 1로 "총"을 켭니다. ..

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