我想从表中的几列中选择第一个非空值。 通常我会用
SELECT COALESCE(col1, col2, col3) FROM table
但是这次我不需要值,而是列的名称(或每列的一些指定文本),第一个不是空值。
一个例子:
表:
col1 | col2 | col3
null | null | 3
null | 5 | 8
2 | null | 2
应该返回:
col3
col2
col1
有没有办法用单个SQL语句来做?
注意:我正在使用PostgreSQL。
答案 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;