Присвойте значение новому полю в зависимости от того, какое из существующих полей имеет совпадение строк - PullRequest
1 голос
/ 17 февраля 2020

Мои данные выглядят примерно так:

Col1    COl2    Col3    COl4    COl5
Yes     No      No      No      No
No      Yes     No      No      No

И я хочу создать новый столбец следующим образом:

Col1    COl2    Col3    COl4    COl5    NEW_FIELD
Yes     No      No      No      No      Col1
No      Yes     No      No      No      Col2

При этом новое поле принимает имя поля, где «Да» соответствует (это происходит только в одном из столбцов между Col1 и Col5).

Я считаю, что могу сделать это с помощью функции CASE, но, поскольку у меня есть приблизительно 10 столбцов, синтаксис получает немного громоздко, и мне интересно, есть ли более чистая функция типа MIN() в полях?

1 Ответ

1 голос
/ 17 февраля 2020

Вы можете получить первое значение, используя coalesce() и case:

select t.*,
       (coalesce(case when col1 = 'Yes' then 'col1' end,
                 case when col2 = 'Yes' then 'col2' end,
                 case when col3 = 'Yes' then 'col3' end,
                 case when col4 = 'Yes' then 'col4' end,
                 case when col5 = 'Yes' then 'col5' end
                )
        ) as new_field

На самом деле, coalesce() не требуется:

select t.*,
       (case when col1 = 'Yes' then 'col1'
             when col2 = 'Yes' then 'col2'
             when col3 = 'Yes' then 'col3'
             when col4 = 'Yes' then 'col4'
             when col5 = 'Yes' then 'col5'
        ) as new_field

Это не кажется особенно "громоздкий".

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