2017-02-28 55 views
0

我在更新sql中的临时表的列时出现问题。 这是我的查询。SQL设置SUM IN内部连接更新

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 

有没有办法获得总和,并仍然这样更新?

+0

您使用MySQL或MS SQL Server或Sybase吗? – jarlh

+0

使用ms sql @jarlh –

+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 
; 
+0

它的作品,我认为。但是即时查询非常大的表,因此执行需要相当长的时间。我可能不得不重新考虑我的方法。谢谢! –