SQL:如何将列合并为一,并过滤出NULL?

时间:2019-02-15 13:18:19

标签: sql

这是我的桌子。 ID列表的注册日期在列通讯,报告,图表中。

enter image description here

我想将所有这些列合并为一个,而没有NULL

我尝试了以下代码

SELECT id, 
   combined_column
FROM (
    SELECT id, 
         CONCAT(newsletter, report, infographics) AS combined_column 
    FROM table
     )

WHERE combined_column is not NULL

但这给我一个空白表。有办法解决吗?谢谢

5 个答案:

答案 0 :(得分:2)

你只想要这个吗?

select max(newsletter) as newsletter,
       max(report) as report,
       max(infographics) as infographics
from t;

答案 1 :(得分:1)

答案可能取决于您使用的数据库,因此请注意。

是否像您的示例中那样只有一列为非空?

然后类似:

SELECT id, COALESCE(newsletter, infographics, report) FROM my_table;

可能会为您服务...

答案 2 :(得分:1)

如果您使用的是Oracle,请使用NVL用空字符串替换NULL

SELECT id, 
   combined_column
FROM (
    SELECT id, 
         CONCAT(NVL(newsletter,''), NVL(report,''), NVL(infographics,'')) AS combined_column 
    FROM table
     )

WHERE combined_column is not NULL

答案 3 :(得分:1)

我认为您希望coalesce从列表中返回第一个非空值(如果您在一行中有多个非空值,它仍将返回第一个):

SELECT id, COALESCE(newsletter, report, infographics) AS combined_date
FROM t
WHERE COALESCE(newsletter, report, infographics) IS NOT NULL

答案 4 :(得分:1)

SELECT ID,     CONCAT(新闻通讯,报告,信息图表)AS Combined_column 从表WHERE通讯不为空,报告不为空,信息图表不为空