Sql Oracle如何在一列上使用distinct

Sql Oracle如何在一列上使用distinct,sql,oracle,Sql,Oracle,我正在查询Oracle 11g: SELECT distinct to_number(val.number_value), val.variant_number from val left join mad on mad.id = val.madid where val.id = 227753377 and mad.fk_parent =18468 and (val.language_id = 6003 or val.language_id is null) and

我正在查询Oracle 11g:

SELECT 
  distinct to_number(val.number_value), val.variant_number
from
  val
left join
  mad on mad.id = val.madid
where 
  val.id = 227753377 and mad.fk_parent =18468
  and (val.language_id = 6003 or val.language_id is null)
  and mad.identifier = 'IDENTIFIER2'
order by val.variant_number
这让我回想起:

0 | 1
0 | 2
0 | 3 
0 | 4 
0 | 5
在这种情况下,Oracle不知道该做什么,因为我想它引用了所有选定的列

在上述情况下,我需要的是以下结果:

 0 | 1
但在另一个例子中,它应该给我:

0 | 1
1 | 2
2 | 3
如果val.number_值是重复的,则应忽略它,并为此仅返回1行。 如何做到这一点?

如果每个数值只需要一个变量号,则可以使用group by和一些聚合函数,例如min/max:

SELECT 
  to_number(val.number_value), min(val.variant_number)
from
  val
left join
  mad on mad.id = val.madid
where 
  val.id = 227753377 and mad.fk_parent =18468
  and (val.language_id = 6003 or val.language_id is null)
  and mad.identifier = 'IDENTIFIER2'
group by to_number(val.number_value) 
如果每个数值只需要一个变量数值,则可以使用group by和一些聚合函数,例如min/max:

SELECT 
  to_number(val.number_value), min(val.variant_number)
from
  val
left join
  mad on mad.id = val.madid
where 
  val.id = 227753377 and mad.fk_parent =18468
  and (val.language_id = 6003 or val.language_id is null)
  and mad.identifier = 'IDENTIFIER2'
group by to_number(val.number_value) 
通过在窗口函数中更改order By,可以配置从副本中获取哪一行


通过在窗口函数中更改order By,您可以配置从副本中获取哪一行。

谢谢您的帮助,但order By中出现错误:窗口中缺少order By表达式specification@frgtv10-分析子句中的括号太多;你想再试一次吗?尽管在这里使用聚合最小值也会产生相同的效果;如果您对选择哪一个重复行的要求更复杂,例如使用“选择”中未包含的日期字段,这将为您提供更大的灵活性。@AlexPoole:谢谢您纠正我的打字错误。起初我忘记了订单,但添加时我把代码搞乱了;感谢您的帮助,但order by中出现错误:窗口中缺少order by表达式specification@frgtv10-分析子句中的括号太多;你想再试一次吗?尽管在这里使用聚合最小值也会产生相同的效果;如果您对选择哪一个重复行的要求更复杂,例如使用“选择”中未包含的日期字段,这将为您提供更大的灵活性。@AlexPoole:谢谢您纠正我的打字错误。起初我忘记了订单,但添加时我把代码搞乱了;非常感谢。对我来说这是最简单的方法。谢谢。对我来说,这是最简单的方法。