Postgresql 基于数据的Postgres搜索栏

Postgresql 基于数据的Postgres搜索栏,postgresql,Postgresql,我必须根据数据搜索列名 我的桌子 id | serv1 | serv2 | serv3 | serv4 | serv5 | serv6 | ------------------------------------------------------- 001| 2 | 3 | 5 | 1 | 4 | 6 | ------------------------------------------------------- 002| 2

我必须根据数据搜索列名

我的桌子

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   
--------------

将行转换为json,并使用函数json_each_text进行转置。然后在值等于
'1'
的地方进行过滤,注意json_每个_文本都将值转换为文本

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'

将行转换为json,并使用函数json_each_text进行转置。然后在值等于
'1'
的地方进行过滤,注意json_每个_文本都将值转换为文本

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'

一份案例陈述可以:

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;

一份案例陈述可以:

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;