我正在使用MS-SQL 2012
WITH C1
(
SELECT ID, 0 as Match, Field2, Count(*)
FROM TableX
GROUP BY ID, Fields2
)
UPDATE C1 SET Match = 1
WHERE ID = (SELECT MATCHING_ID FROM AnotherTable WHERE ID = C1.ID)
此TSQL语句给出了以下错误:
更新或插入视图或函数'C1'失败,因为它包含派生或常量字段。
理想情况下,我想创建一个名为Match的“假字段”,并将其默认值设置为0.然后,通过更新,我只想更新“AnotherTable”上有现有条目的记录。
有什么想法我做错了什么? 谢谢你提前。
答案 0 :(得分:1)
尝试执行左外连接,如
SELECT x.ID, ISNULL(a.Matching_ID, 0) as Match, x.Field2, Count(*)
FROM TableX x
LEFT OUTER JOIN AnotherTable a on x.ID = a.ID
GROUP BY x.ID, ISNULL(a.Matching_ID, 0), x.Fields2
无需C1
答案 1 :(得分:1)
如果我理解正确,问题是您正在尝试更新CTE表。如果你直接更新表,你应该没问题。
此修改版本有帮助吗?
SELECT t.ID
, CASE WHEN (EXISTS (SELECT MATCHING_ID FROM AnotherTable WHERE ID = t.ID)) THEN 1 ELSE 0 END
,t.Field2
,Count(*)
FROM TableX t
GROUP BY ID, Fields2