SQL使用内部联接设置SUM IN更新

时间:2017-02-28 09:16:02

标签: sql sql-server tsql

我在使用sql更新临时表的列时遇到问题。 这是我的询问。

UPDATE #temp
SET #temp.totalcredit = 
SUM(CASE WHEN c.ratetype = 'NRP' THEN d.Credit ELSE d.Credit * f.equivalent END)
from #temp a 
inner join theader b
on a.IV = b.docnum
and a.SOANUM is not null
inner join BillRun c
on rtrim(replace(
    case
        when charindex('-',b.comments,1) <> 6 AND charindex('-',b.comments,1) > 0
        then substring(ltrim(rtrim(b.comments)),1, charindex('-',b.comments,1)-1)
        when charindex(' ',b.comments,1) > 0
        then substring(ltrim(rtrim(b.comments)),1, charindex(' ',b.comments,1)-1)
        else left(ltrim( comments),10)
    end,'''','')) = c.BillRunCode OR c.BillRunCode = b.runcode
inner join BillRunProposalSummary d
on c.BillRunCode = d.BillRunCode and d.Credit > 0
inner join configforexrates f
on f.date = c.DocDate

有没有办法获得总和并仍然以这种方式更新?

1 个答案:

答案 0 :(得分:1)

你尝试过这样的事吗?

UPDATE A
SET A.TotalCredit = T.Credit
FROM #temp A
CROSS APPLY
(
SELECT SUM(
    CASE C.RateType 
        WHEN 'NRP' THEN D.Credit 
    ELSE 
        D.Credit * F.Equivalent 
    END) AS Credit
FROM Theader B
inner join BillRun c
on rtrim(replace(
    case
        when charindex('-',b.comments,1) <> 6 AND charindex('-',b.comments,1) > 0
        then substring(ltrim(rtrim(b.comments)),1, charindex('-',b.comments,1)-1)
        when charindex(' ',b.comments,1) > 0
        then substring(ltrim(rtrim(b.comments)),1, charindex(' ',b.comments,1)-1)
        else left(ltrim( comments),10)
    end,'''','')) = c.BillRunCode OR c.BillRunCode = b.runcode
inner join BillRunProposalSummary d
on c.BillRunCode = d.BillRunCode and d.Credit > 0
inner join configforexrates f
on f.date = c.DocDate
WHERE B.DocNum = A.IV
) T
WHERE A.SOANUM IS NOT NULL
;