我有一个表(称为oldtable
),相关的列是name
,group
,zip code
。我已将它们选择到新表中(称为newtable
)。我的问题是,第一个表中的某些邮政编码为NULL。我想用其group
的模式(最常用的值)替换NULL邮政编码。
例如,假设newtable
中的一行看起来像这样:
Name Group ZipCode
Blah G1 NULL
我想用oldtable
中G1中所有人员中最通用的邮政编码替换该NULL。我什至无法开始按另一列分组时拉出一列的模式。
我正在使用Microsoft SQL Server 2016。
答案 0 :(得分:2)
这可以在UPDATE上使用CROSS APPLY完成。
UPDATE n SET
zipcode = x.zipcode
FROM newtable n
CROSS APPLY( SELECT TOP 1 zipcode, COUNT(*) cnt
FROM newtable o
WHERE n.[group] = o.[group]
GROUP BY zipcode
ORDER BY cnt DESC) x
WHERE n.zipcode IS NULL;