使用coalesce返回列名

时间:2014-10-17 11:12:30

标签: sql postgresql

我想从表中的几列中选择第一个非空值。 通常我会用

SELECT COALESCE(col1, col2, col3) FROM table

但是这次我不需要值,而是列的名称(或每列的一些指定文本),第一个不是空值。

一个例子:

表:

col1 | col2 | col3
null | null | 3
null | 5    | 8
2    | null | 2

应该返回:

col3
col2
col1

有没有办法用单个SQL语句来做?

注意:我正在使用PostgreSQL。

2 个答案:

答案 0 :(得分:7)

我建议使用CASE声明

SELECT 
   CASE WHEN col1 IS NOT NULL THEN 'col1'
        WHEN col2 IS NOT NULL THEN 'col2'
        WHEN col3 IS NOT NULL THEN 'col3'
        ELSE NULL
   END
FROM table;

答案 1 :(得分:2)

如果所有列都是字符串,您也可以使用coalesce替换。

SELECT
    REPLACE(COALESCE(COL1||'COL1',COL2||'COL2',COL3||'COL3'),COALESCE(COL1,COL2,COL3),'')
FROM YOUR_TABLE;

如果所有列都是数字,您可以:

SELECT
    'COL'||CAST(COALESCE(COL1+1,COL2+2,COL3+3) - COALESCE(COL1,COL2,COL3) AS CHAR(1))
FROM YOUR_TABLE;