如果重复行,如何只选择1行(Oracle)

时间:2016-09-30 16:11:39

标签: sql oracle sqlcode

我的表格包含以下订单信息:

正如我们从该表中看到的,每个order_no都有几个重复。所以我想要的是每个order_no只保留一行(无论哪个)

有没有人知道如何做到这一点?(我尝试了不同的',但这些重复行的某些列是不同的,所以'不同'可以' t在这里工作)

3 个答案:

答案 0 :(得分:0)

也许这样的事情?您可以使用PARTITION BYORDER BY子句来确定返回哪一行。航空代码:

SELECT t.*
FROM (
     SELECT o.*
          , ROW_NUMBER() OVER (PARTITION BY o.order_no ORDER BY o.sequence_no) rn
     FROM ordertable o
     ) t
WHERE rn = 1
;

答案 1 :(得分:0)

我遇到了同样的问题,这个查询对我有用。

WITH summary
       AS (SELECT   g.*,
                    ROW_NUMBER ()
                       OVER (PARTITION BY g.param_text
                             ORDER BY g.gnl_param_id DESC)
                       AS rk
             FROM  gnl_param g)
SELECT   s.gnl_param_id, s.param_text
  FROM   summary s
 WHERE   s.rk = 1

这里,param_text列应该是唯一的,但不知何故发生了重复的行。这就是我在这一栏中使用分区关键字的原因。

答案 2 :(得分:-1)

SELECT *
FROM
    (
       SELECT *
          ,ROW_NUMBER() OVER (PARTITION BY ORDER_NO ORDER BY ????) as RowNumber
       FROM
          Orders
    ) o
WHERE
    o.RowNumber = 1

只需填写order by子句,即可选择您想成为第一行的记录。如果您不关心哪条记录的顺序,则将该行更改为

,ROW_NUMBER() OVER (PARTITION BY ORDER_NO ORDER BY Null) as RowNumber

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions137.htm

由于ORDER BY NULL,我假设投票结果为止?但Oracle接受它tsql(sql-server)没有。看到这个答案:

what does this mean "order by NULL"