编写SELECT查询填充[Tags.1]列空值为对应ReourceID的唯一值
用SQL替换NULL值为对应资源ID的唯一非空标签值
问题描述
现有一张包含ReourceID和[Tags.1]列的表,其中[Tags.1]存在NULL值。需要编写SELECT查询,将每个NULL值替换为对应ReourceID的唯一非空[Tags.1]值。
原始数据:
ReourceID [Tags.1] 1x ws 2x NULL 1x ws 3x qs 2x sg 4x ee 3x NULL 4x NULL 2x sg
期望结果:
ReourceID [Tags.1] 1x ws 2x sg 1x ws 3x qs 2x sg 4x ee 3x qs 4x ee 2x sg
解决方案
由于每个ReourceID对应的非空[Tags.1]值是唯一的,优先用窗口函数结合COALESCE()实现,性能更优:
SELECT ReourceID, COALESCE([Tags.1], MAX([Tags.1]) OVER (PARTITION BY ReourceID)) AS [Tags.1] FROM 你的表名;
如果你的SQL环境不支持窗口函数,也可以用关联子查询实现:
SELECT t1.ReourceID, COALESCE(t1.[Tags.1], (SELECT MAX(t2.[Tags.1]) FROM 你的表名 t2 WHERE t2.ReourceID = t1.ReourceID)) AS [Tags.1] FROM 你的表名 t1;
原理说明
PARTITION BY ReourceID:按ReourceID分组,为每组计算出唯一的非空[Tags.1]值(因值唯一,用MIN()替换MAX()结果一致)。COALESCE():判断当前行的[Tags.1],若为NULL则替换为分组得到的唯一非空值,否则保留原值。
内容的提问来源于stack exchange,提问作者Shehab
相关产品推荐
相关产品推荐

