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)
当您嵌套 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