Sql server 从CTE更新不会正确更新所有表行。但使用CTE resultset中第一个ID中返回的CTE值更新所有现有表行

Sql server 从CTE更新不会正确更新所有表行。但使用CTE resultset中第一个ID中返回的CTE值更新所有现有表行,sql-server,sql-update,common-table-expression,Sql Server,Sql Update,Common Table Expression,我已经建立了一个CTE,并希望根据CTE的结果更新现有的物理表 ;WITH CTE AS ( Select t.ID As [CTE_ID] ,count(distinct case when e.Department='M' then t.ID else null end) as M_Marketing ,count(distinct case when e.Department='S' then t.ID else null end) as S_Sales

我已经建立了一个CTE,并希望根据CTE的结果更新现有的物理表

;WITH CTE
 AS 
 (
 Select t.ID As [CTE_ID]
       ,count(distinct case when e.Department='M' then t.ID else null end) as M_Marketing
       ,count(distinct case when e.Department='S' then t.ID else null end) as S_Sales   
       ,count(distinct case when e.Department='U' then t.ID else null end) as U_Utilization    
       ,count(distinct case when e.Department=' ' then t.ID else null end) as No_NoDepartment
    From dbo.Table t (nolock) 
        Left Join dbo.ClearedEmployee ce (nolock) ON t.ID = ce.building_fk
             Join dbo.Employee e (nolock) ON ce.employee_fk = e.employee_pk
    Group By t.ID
)

Select *,  t.ID 
From CTE c (nolock)
FULL JOIN dbo.Table t (nolock) ON t.ID=c.[CTE_ID]
Order By t.ID ASC;
我想用上述代码为CTE中的每个ID生成的结果更新我的现有表,我使用的代码如下:

UPDATE dbo.Table t
    SET Marketing=M_Marketing,
        Sales=S_Sales, 
        Utilization=U_Utilization,
        NoDepartment=No_NoDepartment
    FROM CTE 
但是,这段代码使用CTE结果集第一行中的值更新Marketing、Sales、Utilization和NoDepartment列的所有行(具有唯一ID的所有行)。基本上,我不能真正使用CTE true结果集来更新表

UPDATE  t
    SET t.Marketing=M_Marketing,
        t.Sales=S_Sales, 
        t.Utilization=U_Utilization,
        t.NoDepartment=No_NoDepartment
    FROM CTE C JOIN Table T ON T.ID=C.CTE_ID

在update语句中,需要告诉SQL Server如何将CTE中的数据映射到表中的数据

请确定标题。大写锁定无法阅读。请编辑标题以删除标题。没有必要在这里对我们大喊大叫。我们都能读得很好。大声叫喊并不能让你更快地得到帮助,它是非常粗鲁和烦人的,而且更难阅读。现在请停止叫喊。一开始你的键盘好像有点问题,我本来想请人捐款给你买一个新的,但在你的帖子正文中,它显然工作得很好,所以只是你对我们大喊大叫,表现得很粗鲁。请{编辑]来解决这个问题;我们不喜欢在这里大喊大叫。@Ken,在你写那篇文章的时候,你可能已经解决了这个问题。但这不会那么有趣,所以这是值得称赞的:-)@paxdiablo:是的,我本来可以解决的,但是海报没有学习,并且像剧中的小男孩一样不断地大喊大叫试着引起你的注意。海报需要知道我们在这里不叫喊,在问题得到解决之前,在这里叫喊有着像否决票一样的自负,希望在问题写得更清楚之前也没有帮助。谢谢你,阿卡什。我感谢你的提示。
UPDATE  t
    SET t.Marketing=M_Marketing,
        t.Sales=S_Sales, 
        t.Utilization=U_Utilization,
        t.NoDepartment=No_NoDepartment
    FROM CTE C JOIN Table T ON T.ID=C.CTE_ID