Поисковая колонка Postgres на основе данных - PullRequest
0 голосов
/ 18 мая 2018

Я должен искать имя столбца на основе данных.

Моя таблица

id | serv1 | serv2 | serv3 | serv4 | serv5 | serv6 |  
-------------------------------------------------------  
001| 2     | 3     | 5     | 1     | 4     | 6     |
-------------------------------------------------------  
002| 2     | 1     | 5     | 3     | 4     | 6     |
-------------------------------------------------------  
003| 6     | 2     | 5     | 3     | 4     | 1     |  

Я хочу, чтобы имя поля имело значение данных 1 .

Мой вывод

--------------
001| serv4    
--------------
002| serv2    
--------------
003| serv6   
--------------

Ответы [ 2 ]

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

Оператор case будет делать:

SELECT id,
       CASE WHEN serv1 = 1
            THEN 'serv1'
            WHEN serv2 = 1
            THEN 'serv2'
            WHEN serv3 = 1
            THEN 'serv3'
            WHEN serv4 = 1
            THEN 'serv4'
            WHEN serv5 = 1
            THEN 'serv5'
            WHEN serv6 = 1
            THEN 'serv6'
       END
FROM mytable;
0 голосов
/ 18 мая 2018

Преобразуйте строку в json и используйте функцию json_each_text для транспонирования.Затем отфильтруйте, где значение равно '1', обратите внимание, что json_each_text преобразует значение в текст.

WITH mytable 
    (id, serv1, serv2, serv3, serv4, serv5, serv6) 
AS (
VALUES 
    ('001', 2,3,5,1,4,6),
    ('002', 2,1,5,3,4,6),
    ('003', 6,2,5,3,4,1)
)
SELECT id, tjs.key column_name
FROM mytable t, json_each_text(row_to_json(t)) tjs
WHERE tjs.value = '1'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...