2016-09-30 3 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 BY и ORDER 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 

Просто заполните в порядке статьи выбрать, какую запись вы хотите быть первой строкой. Если вы не заботитесь о порядке которого запись затем изменить строку

,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 должен быть уникальным, но происходили какие-то повторяющиеся строки. Вот почему я использовал раздел по ключевым словам в этом столбце.