2016-09-27 5 views
0

いくつかのフィールドに集約し、他のフィールドにヌル以外の値を取得したい。具体的には、クエリのようなものになります。集計で他のフィールドのヌル値を取得しない

SELECT id, any_value(field1), any_value(field2) FROM mytable GROUP BY ID 

をと列が似ています:

ID | field1 | field 2 
----------------- 
id | null | 3 
id | 1  | null 
id | null | null 
id | 2  | 4 

と出力が(id, 1,4)または(id,2,4)か...ではなく(id, 1, null)

のようなもののようにすることができます

any_value()は、ヌルの行がある場合はそれを返すことが保証されています(私の実験ではそうでしたが)。あるいは、ある場合でもnullの値を持つ行を返すことがありますヌル値ではありません。

any_value()は私が説明したタスクを実行しますか?もしあなたがそれをすることをどのように示唆していないのであれば?

+0

私はあなたの質問に従うことができません。クエリに 'id'がありますが、サンプルデータにはありません。出力に3つの列がありますが、混乱します。 –

+0

私の質問を編集しました。 –

答えて

0

これは推測の一種ですが、試してみました:

SELECT id, MIN(field1), MAX(field2) 
FROM mytable 
GROUP BY id; 

これはNULL値が2列から、異なる値を返す無視されます。

0

また、分析関数も使用できます。

以下

は、クエリ(SQLサーバー)である:

select id, field1, field2 
    from (select id, field1, field2, row_number() 
    over (partition by id order by isnull(field1, 'ZZZ') asc, isnull(field2, 'ZZZ') asc) as RNK from mytable) aa 
    where aa.RNK = 1; 

これは、あなたが任意の列でする最大の値を探している場合は、order by句で順序を変更することができ、一つだけの行が返されます。

関連する問題