SQL Server-用按另一列分组的列模式替换NULL值

时间:2019-03-20 18:02:31

标签: sql-server group-by

我有一个表(称为oldtable),相关的列是namegroupzip code。我已将它们选择到新表中(称为newtable)。我的问题是,第一个表中的某些邮政编码为NULL。我想用其group的模式(最常用的值)替换NULL邮政编码。

例如,假设newtable中的一行看起来像这样:

Name   Group ZipCode
Blah   G1    NULL

我想用oldtable中G1中所有人员中最通用的邮政编码替换该NULL。我什至无法开始按另一列分组时拉出一列的模式。

我正在使用Microsoft SQL Server 2016。

1 个答案:

答案 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;