2016-09-30 73 views
0

我有一個表中包含類似下面的訂單信息:如何只選擇1行,如果重複行(Oracle)的

我們可以從表中看到,每個order_no有幾個重複。所以我想要每個order_no只保留一行(不管是哪一個)

有誰知道如何做到這一點?所以'明顯'不能在這裏工作)

+2

第1步 - 決定你想要哪一行。 –

+1

這裏是關於如何在未來提出問題的一些提示。比如不要發佈你的數據的圖像。我不打算重新輸入它,所以如果你想要的答案已經過測試,而不僅僅是概念化,你應該包含一種方式讓我們有測試數據,如DML語句。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Matt

+3

您在21小時內發佈了三次相同的問題。爲什麼???你第一次發佈時你有兩個答案;如果他們不夠好,你應該在你原來的帖子中這麼說。 – mathguy

回答

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
SELECT * 
FROM 
    (
     SELECT * 
      ,ROW_NUMBER() OVER (PARTITION BY ORDER_NO ORDER BY ????) as RowNumber 
     FROM 
      Orders 
    ) o 
WHERE 
    o.RowNumber = 1 

順序只需填寫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"

+0

爲什麼投了票? – Matt

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列應該是唯一的,但不知何故出現重複行。這就是爲什麼我在這一列使用關鍵字分區。