You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用UPDATE和SET更新SQL Server临时表但值未变更的问题求助

解决SQL Server临时表中按分组替换0值的问题

问题分析

你的现有代码逻辑存在错误:CASE语句中,当检测到分组存在非零值时,你把Column_B设为当前行的Column_B值(也就是0,因为UPDATE的WHERE条件限定了Column_B=0),等于没有执行任何替换操作,这就是数据未发生变化的原因。

正确解决方案

这里提供两种高效的实现方式:

方法1:关联子查询获取分组非零值

通过子查询定位每个Column_A对应的非零Column_B值,直接替换0值:

UPDATE t
SET Column_B = (SELECT TOP 1 Column_B 
                FROM #temp_table t2 
                WHERE t2.Column_A = t.Column_A 
                  AND t2.Column_B <> 0)
FROM #temp_table t
WHERE t.Column_B = 0;

注:如果每个Column_A分组内的非零值唯一(如你的示例数据),TOP 1可确保获取正确值;若分组内存在多个不同非零值,需根据业务需求改用MAX()/MIN()等聚合函数。

方法2:窗口函数实现(SQL Server 2012+适用)

利用MAX()窗口函数计算每个分组的非零值,再批量更新:

WITH CTE AS (
    SELECT Column_A, Column_B,
           MAX(Column_B) OVER (PARTITION BY Column_A) AS GroupNonZeroValue
    FROM #temp_table
)
UPDATE CTE
SET Column_B = GroupNonZeroValue
WHERE Column_B = 0;

这种方式更简洁,MAX()会自动忽略0值,直接取分组内的有效非零值。

验证结果

执行上述任意一种方法后,临时表数据将符合预期:

Column_AColumn_B
ABC123
ABC123
ABC123
DEF456
DEF456
DEF456
GHI123
GHI123

内容的提问来源于stack exchange,提问作者GLo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:35:06