ORACLE SQL:如果出现多次,则仅显示特定值

时间:2013-07-29 17:03:06

标签: sql oracle oracle10g

我有一个有两列的表......

LN    |   SRCREF
LN-1  |  LN/123456
LN-1  |  LN/789012
LN-2  |  LN/123456
LN-2  |  LN/098765
LN-3  |  LN/123456
LN-3  |  LN/789012
LN-3  |  LN/432109

我想要归还这样的东西......

LN    |    SRCREF
LN-1  |  LN/123456
LN-1  |  LN/789012
LN-2  |  LN/098765
LN-3  |  LN/432109

所以换句话说,我只想以优先顺序返回SRCREF,所以我看到所有那些拥有LN-1然后那些没有LN-1而LN-2然后最终只拥有LN-1的那些LN-3。

我希望这是有道理的,谢谢。

1 个答案:

答案 0 :(得分:2)

您可以按SRCREF进行分组。这意味着您在结果中只有一个值SRCREF。

然后,您可以使用聚合函数从LN获取一个特定值以使用该SRCREF值。在这种情况下,我使用min返回最低值。因此,您获得的每个SRCREF值都具有最低的LN值。

最后,我使用order by按最低值排序。

select
  min(LN) as first,
  SRCREF 
from
  YourTable t
group by
  SRCREF 
order by
  min(LN)

请注意,在这种情况下,您可能会得到奇怪的结果,因为第一列是字符字段。这意味着它的内容按字母顺序进行比较。这意味着L-10将在L-2之前出现。还有其他方法可以解决这个问题,但我不知道这对你来说是不是一个问题。