5

我想通过获取 field1 和 field2 唯一的记录来查询表,同时选择具有 field4 的行以获得一些值而不是优先级为 null。

例如在原始表中

field1  field2  field3  field4
  1       B       A     (null) 
  1       B       A       2   
  2       C       A       3   
  2       D       A     (null)
  3       D       F       3   
  2       C       A       3   

我希望从输出查询中得到的是:

field1  field2  field3  field4
  1       B       A       2   
  2       C       A       3   
  2       D       A     (null)
  3       D       F       3   

是否有任何有效的 SQL 表连接技术/过滤方法来实现这一点?谢谢

P/S - 为避免混淆,仅区分 field1 和 field2 的目的是因为 field3 可以具有不同的值,所选行将基于那些 field4 优先级不为空的行

例如

field1  field2  field3  field4
  1       B       A     (null)   
  1       B       C       2       <- this will be the chosen one
4

2 回答 2

7

尝试这个:

您只需要按前 3 个字段分组并取 MAX() of filed4

select "field1","field2","field3",max("field4")
from Table1
group by "field1","field2","field3"
order by "field1"


SQL小提琴演示

编辑:

如果您只想将field1 和 field2作为分组的一部分,请尝试以下操作:

select "field1","field2","field3","field4"
from(
select "field1","field2","field3","field4",
        row_number() 
        over(partition by "field1","field2" order by "field4" desc) as rn
from Table1)A
where A.rn=1


SQL 小提琴演示 2

于 2012-10-25T07:00:41.680 回答
1

您可以使用 max,但必须确保您选择了正确的字段 3。这将做到这一点:

select field1, 
   field2 , 
   max(field3) keep (dense_rank first order by field4 desc) as field3, 
   max(field4)
from Table1
group by field1, field2 ,field3,
order by field1, field2
于 2012-10-25T07:21:03.997 回答