2016-09-29 2 views
-1

私は5つのカラムを持つテーブルを持っています。データの特徴は、ある行のすべての値が同じですが、必ずしも各列に値があるとは限りません。例はカラム間で選択的にデータを結合する

h1 h2 h3 h4 h5 
1 1  1 
    2 2  2 
4  4 4 
8  8  
21 21 

各行にある固有の番号をリストする単一の列を作成したいと考えています。例えば。出力は次のようになります。

output 
1 
2 
4 
8 
21 

どうすればいいですか?

+7

1行に異なる数字がある場合はどうなりますか? '1、2、3'? –

+0

非常にあいまいな質問です。 –

+0

申し訳ありません - 私はもう一度試してみます – user3770062

答えて

1
select distinct 
coalesce(h1,coalesce(h2,coalesce(h3,coalesce(h4,h5)))) 
from your_tab 
order by 1 

EDIT:

distinctは不要であり、唯一coalesce()が必要とされている:

select coalesce(h1, h2, h3, h4, h5) 
from your_tab 
order by 1 ; 
+1

coalesce(h1、h2、h3、h4、h5) – hemalp108

2

チェック各行の列の束のための単一の最大値を返すGREATEST()条件式ため

SELECT GREATEST(h1,h2,h3,h4,h5) 
FROM tableName 

Ofcourse、最小値としてLEAST()を使用することもできます。

NULL値は無視され、行の式のすべての列は、次いでNULLある場合NULLが返されます。

+0

文書にはNULL値が無視されているので、ヌル値.. coalesce()関数 –

+0

と同じです。 。おっとっと。 Postgresは通常、そのようなことについてSQL標準に従いますが、この場合はありません。だから、この答えはPostgresでうまくいくでしょう。 –

+0

@ GordonLinoff: 'GREATEST'と' LEAST'は標準SQLではありません。少なくとも、[このマニュアルはそうだ](https://www.postgresql.org/docs/current/static/functions-conditional.html#FUNCTIONS-GREATEST-LEAST): 'GREATESTとLEASTはSQLにはない標準ですが、一般的な拡張機能です。他のデータベースでは、すべての引数がNULLの場合だけでなく、引数がNULLの場合はNULLを返すデータベースもあります。NULLを無視すると(ほとんどの集約関数と同様)、とにかく便利です。 –

関連する問題