所以我有一张包含3个cols的表:
Col1 Col2 Col3
a b c
b c null
a null b
c d a
我想要的输出是:
a,b,c,d,null
我希望尽可能将输出放在一个字符串中。
我试过了:
SELECT DISTINCT col1, col2, col3 FROM table
并没有得到预期的结果。任何想法?
答案 0 :(得分:2)
单字符串解决方案(请参阅sqlfiddle):
SELECT GROUP_CONCAT(COALESCE(c, 'NULL'), ',')
FROM (
SELECT col1 c
FROM mytable
UNION
SELECT col2 c
FROM mytable
UNION
SELECT col3 c
FROM mytable
) q
答案 1 :(得分:1)
这在sqlite中起作用:
select col1 from table
union
select col2 from table
union
select coll3 from table
或:
select col1 from table where col1 is not null
union
select col2 from table where col2 is not null
union
select coll3 from table where col3 is not null
消除空值。
注意我认为这不会很快执行但我知道在mssql union中会对结果做一个明确的
答案 2 :(得分:1)
SELECT Col1
FROM table
UNION
SELECT Col2
FROM table
UNION
SELECT Col3
FROM table
答案 3 :(得分:0)
如果您使用的是MySql,则可以使用此解决方案:
select group_concat(coalesce(c,'null') order by c is null, c)
from (
select col1 c from tbl
union
select col2 c from tbl
union
select col3 c from tbl
) u
联合查询选择所有值,删除所有重复项。然后我将结果返回到单个字符串中,在结尾处按值以null值排序,并将null转换为'null'(因为group_concat将忽略空值)。
如果您使用的是SQLite,则Group_Concat不支持order by,您可以使用它:
select group_concat(coalesce(c,'null'))
from (
select col1 c, col1 is null o from mytable
union
select col2 c, col2 is null o from mytable
union
select col3 c, col3 is null o from mytable
order by o, c
) u