基于关联SELECT结果的CASE语句实现INSERT操作的SQL问题咨询
可行解决方案
你需要先预计算每个Spell_ID对应的最大Episode_Order(即M值),再通过Spell_ID关联目标表执行更新操作,不要使用INSERT(INSERT会新增行,你的需求是更新已有行的字段),正确代码如下:
-- 先清空现有Episode_Ward值 UPDATE Inpatient_Episodes_Landing SET Episode_Ward = NULL; -- 用CTE预计算每个Spell_ID对应的M值(最大Episode_Order) WITH Spell_Max_Episode AS ( SELECT Spell_ID, MAX(Episode_Order) as M FROM [dbo].[Client_MidEssex_Inpatient_Episodes_Landing] GROUP BY Spell_ID -- 如果需要限制只处理前1000个Spell_ID,取消下一行注释 -- ORDER BY Spell_ID OFFSET 0 ROWS FETCH FIRST 1000 ROWS ONLY ) -- 关联更新目标表 UPDATE t SET t.Episode_Ward = CASE WHEN t.Episode_Order = 1 THEN t.Admission_Ward_Code WHEN t.Episode_Order = m.M THEN t.Discharge_Ward_Code ELSE t.Admission_Ward_Code END FROM [dbo].[Inpatient_Episodes_Landing] t INNER JOIN Spell_Max_Episode m ON t.SpellID = m.Spell_ID; -- 查看更新结果 SELECT TOP (1000) SpellID, Episode_Number, Episode_Ward FROM Inpatient_Episodes_Landing;
注意事项
- 如果你的
Episode_Order字段是字符串存储(比如存为'01'而不是数值1),请把判断条件改为WHEN t.Episode_Order = '01' - 关联条件的字段名请和你的实际表结构对应,如果源表的
Spell_ID和目标表的SpellID命名有差异请自行调整
内容的提问来源于stack exchange,提问作者user15464793
相关产品推荐
相关产品推荐

