0

SO私は3列のテーブルを持っています:

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

そして、望ましい結果が得られませんでした。何か案は?

4

4 に答える 4

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
于 2013-01-17T22:10:19.860 に答える
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

ヌルを排除します。

これを実行するのは速いとは思わないことに注意してください。

于 2013-01-17T22:02:59.473 に答える
1
SELECT Col1
FROM table
UNION
SELECT Col2
FROM table
UNION
SELECT Col3
FROM table
于 2013-01-17T22:04:30.117 に答える
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 は null 値を無視するため)。

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
于 2013-01-17T22:09:23.073 に答える