这是我的桌子。 ID列表的注册日期在列通讯,报告,图表中。
我想将所有这些列合并为一个,而没有NULL
我尝试了以下代码
SELECT id,
combined_column
FROM (
SELECT id,
CONCAT(newsletter, report, infographics) AS combined_column
FROM table
)
WHERE combined_column is not NULL
但这给我一个空白表。有办法解决吗?谢谢
答案 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通讯不为空,报告不为空,信息图表不为空