2016-09-27 58 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条款更改顺序。

相关问题