2016-09-27 49 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值的行,即使有索姆e不是空值。

any_value()執行我描述的任務嗎?如果不是你以什麼方式建議這樣做呢?

+0

我不能跟隨你的問題。在查詢中有'id',但不在樣本數據中。您的輸出中有三列,但它很混亂。 –

+0

我編輯了我的問題,希望現在清楚 –

回答

0

這是不大不小的猜測,但你嘗試過:

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

這將忽略NULL值從兩列返回不同的值。

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; 

這將返回只有一行,你可以,如果你正在尋找任何列maximun值order by條款更改順序。