在更新语句中使用 SUM()

Bel*_*igh -1 sql-server cte t-sql sql-server-2008-r2 update

我以为我已经确定了这个语法,但是当我尝试执行时,我收到了 Incorrect syntax near ) 的错误。为什么我的语法不正确?

    ;with CTE As
    (
         Select max(entryID) As "MaxEntryID"
         ,userID FROM loghist group by userID
    )
    Select es.userID As userID, cm.companyName, SUM(COALESCE(eq.TotalValue,0)) As TotalValue
    FROM CTE vn
    Inner Join loghist es
    ON vn.userID=es.userID
    AND Coalesce(vn."MaxEntryID",0)=COALESCE(es.entryID,0)
    INNER JOIN company cm
    ON es.customerid = cm.customerid    
    Inner Join loghistpart ep
    ON ep.loghist = es.loghistid
    Inner Join lhq eq
    On eq.loghistpartid = ep.loghistpartid
    GROUP BY es.userID, cm.companyName
)
UPDATE fvi
Set TotalValue = loghistdTotalValue
FROM FullVarianceInfo fvi
INNER JOIN CTE mvn
ON fvi.userID = mvn.userID
Run Code Online (Sandbox Code Playgroud)

Eri*_*ing 5

当您嵌套 CTE 时,您需要为它们命名。

;with CTE As
(
     Select max(entryID) As "MaxEntryID"
     ,userID FROM loghist group by userID
), 
CTE2 AS (
Select es.userID As userID, cm.companyName, SUM(COALESCE(eq.TotalValue,0)) As TotalValue
FROM CTE vn
Inner Join loghist es
ON vn.userID=es.userID
AND Coalesce(vn."MaxEntryID",0)=COALESCE(es.entryID,0)
INNER JOIN company cm
ON es.customerid = cm.customerid    
Inner Join loghistpart ep
ON ep.loghist = es.loghistid
Inner Join lhq eq
On eq.loghistpartid = ep.loghistpartid
GROUP BY es.userID, cm.companyName
)

    UPDATE fvi
    Set TotalValue = loghistdTotalValue
    FROM FullVarianceInfo fvi
    INNER JOIN CTE2 mvn
    ON fvi.userID = mvn.userID
Run Code Online (Sandbox Code Playgroud)

看起来你的UPDATE列也像写的那样倒退。

Set TotalValue = loghistdTotalValue

应该是

Set loghistdTotalValue = TotalValue