SQL Server - замена значений NULL на режим столбца, сгруппированного по другому столбцу - PullRequest
0 голосов
/ 20 марта 2019

У меня есть таблица (назовите ее oldtable) и соответствующие столбцы: name, group, zip code.Я выбрал их в новую таблицу (назовите это newtable).Моя проблема в том, что некоторые почтовые индексы в первой таблице имеют значение NULL.Я хочу заменить почтовые индексы NULL на режим (наиболее распространенное значение) их group.

Например, скажем, строка в newtable выглядит следующим образом:

Name   Group ZipCode
Blah   G1    NULL

Я хочу заменить этот NULL на самый распространенный почтовый индекс среди всех людей в G1 в oldtable.У меня возникают проблемы даже при запуске режима одного столбца при группировании по другому столбцу.

Я использую Microsoft SQL Server 2016.

1 Ответ

2 голосов
/ 20 марта 2019

Это можно сделать с помощью 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;
...