2017-08-15 7 views
1

I持って次のクエリ:PostgreSQLで整数の2つの列を結合する方法は?

select col1, col2 
from ... 
where... 

います:

col3 
5 
17 
4 
12 
20 
2 
3 

私が行うことができますどのように次のように

col1 col2 
5 
     17 
4  5 
12 
5 
     20 
4  17 
2  3 

は私が重複なしで1列に変換したいですそれ? 私はこのトピックCombine two columns and add into one new columnを読んだが、それは私が必要なものではない...オペレータ||はここで助けにならない。

編集: COL3は単にCOL2COL1に表示されるすべての番号のリストです。

+0

三行目は4、5ないを持っている - なぜ? '' coalesce(col1、col2)をテーブルから選択しよう ' - col1を使用し、col1がnullの場合はcol2を指定します。 –

+0

@VaoTsun論理がすべて表示されますいずれの列にも表示されますが、重複はありません。 col3は、単にcol2とcol1に現れるすべての数字のリストです。 – avi

答えて

3

それはあなたがunion

select col1 as col3 from t where col1 is not null 
union 
select col2 as col3 from t where col2 is not null 
2
select coalesce(col1,col2) 
from table 

それはCOL1を使用し、COL1がnullの場合、その後、COL2

https://www.postgresql.org/docs/current/static/functions-conditional.html#FUNCTIONS-COALESCE-NVL-IFNULL

COALESCE関数は nullでない自身の最初の引数を返します。すべての引数がnullの場合にのみNullが返されます。データは は、表示のために取得されたときには、多くの場合、null値の代わりにデフォルト値が使用 ある

+0

合体では不十分です...私は私の例を編集して理由を示しました。番号3は、合体を使用して最終結果に現れることはありません。 – avi

+0

あなたのサンプルでは20 ... 2、3が欠落しています4,17 - 別個の値だけを必要としているからですか?私は、あなたが**両方の列を1つとして選択するのではなく、** 2つの列を結合することを考えていると答えました。 –

1

あなたはhttps://www.postgresql.org/docs/current/static/functions-conditional.html#FUNCTIONS-COALESCE-NVL-IFNULLで文書化されているようにCOALESCE関数を使用することができます。それがNULLでない自身の最初の引数を返します。

yesql# select col1, col2, coalesce(col1, col2) from foo; 
col1 │ col2 │ coalesce 
══════╪══════╪══════════ 
    5 │ ¤ │  5 
    ¤ │ 17 │  17 
    4 │ 5 │  4 
    12 │ ¤ │  12 
    5 │ ¤ │  5 
    ¤ │ 20 │  20 
    4 │ 17 │  4 
(7 rows) 
0

COL3は、単にCOL2とCOL1に表示されるすべての番号のリストである必要があるようです。その場合

、これはあなたが探しているものかもしれませんが:

関連する問題