Заполненный частично пустой столбец со значением на основе другого идентификатора столбца - PullRequest
0 голосов
/ 21 мая 2018

Я не уверен, что мой заголовок понятен.Извини за это.У меня есть следующая таблица:

ID           ref.    dummy_metrics dummy_dimensions
6091039909   A       123           foo
5914111836   B       456           bar
6538463041   C       789           foobar
6018474808   D       1010          bar
6091039909                         foo
6091039909                         foo
6538463041                         foobar
6538463041                         foobar
6538463041                         foobar

Как видите, некоторые части моей таблицы пусты.Я хотел бы сделать вывод, что столбец ref. всегда заполнен чем-то.И я хочу, чтобы это значение основывалось на комбинации пар ключей ID<>ref..

Итак, вот мой ожидаемый результат:

ID           ref.    dummy_metrics dummy_dimensions
6091039909   A       123           foo
5914111836   B       456           bar
6538463041   C       789           foobar
6018474808   D       1010          bar
6091039909   A                     foo
6091039909   A                     foo
6538463041   C                     foobar
6538463041   C                     foobar
6538463041   C                     foobar

Я не хочу создаватьпредопределенную таблицу поиска, как я мог бы сделать, используя формулу CASE.Я хочу что-то динамическое для каждой комбинации ключей ID<>ref., которую я могу найти в своей таблице.

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Вы можете использовать коррелированный подзапрос:

select ID, 
      coalesce(ref,  (select ref 
                      from table t1
                      where t1.ID = t.ID
                      )
              ) as ref, 
       dummy_metrics, dummy_dimensions
from table t;
0 голосов
/ 21 мая 2018

Вот довольно простой метод:

select t.*,
       coalesce(t.ref,
                max(t.ref) over (partition by dummy_dimensions),
                max(t.ref) over ()
               ) as imputed_ref

Он использует оконные функции для заполнения пропущенных значений.Обратите внимание, что существует два уровня вменения: один основан на dummy_dimensions, а другой - на всю таблицу (в случае, если все значения ref равны NULL).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...