SQL: необходимо удалить повторяющиеся строки в запросе - PullRequest
0 голосов
/ 14 ноября 2011

Мне нужна помощь в получении этого результата с помощью SQL-запроса или процедуры. Моя примерная структура таблицы приведена ниже.

Требуемый результат:

docid    status
24       Waiver Requested
26       Waiver Requested
27       Rejected

Таблица A:

docid
----------
24
26
27

Таблица b:

docid     Status
24     Waiver Requested
26     Rejected
26     Waiver Requested
27     Rejected
27     Rejected

Ответы [ 2 ]

0 голосов
/ 14 ноября 2011

Не зная всех ваших бизнес-правил, кроме тех, которые вы дали, вот более общее решение.

Создайте другую таблицу (или, возможно, ваша модель данных уже имеет такую ​​таблицу) с возможными статусами в них:

CREATE TABLE status_rank (
   status   VARCHAR2(100) NOT NULL,
   rank     NUMBER NOT NULL,
   PRIMARY KEY (status_name)
);

Эта таблица используется для ранжирования статусов в порядке приоритета. Другими словами, если «Отказ от запроса» следует выбрать вместо «Отклонено» в случае дубликатов, используйте приоритет 1 для отказа и 2 для отказа.

Так что теперь запрос может использовать эту дополнительную таблицу ранжирования:

SELECT b.docid, r.status
  FROM b,
       status_rank r,
       (SELECT b.id, min(r.rank)
          FROM b, status_rank r
         WHERE b.status = r.status
         GROUP BY id) s
 WHERE b.docid = s.docid
   AND r.rank = s.rank
   AND b.status = r.status;

Существует множество способов выполнить запрос, но это должно показать вам общую идею.

0 голосов
/ 14 ноября 2011

Это очень хорошая статья MSDN "Найти и / или удалить повторяющиеся строки" http://archive.msdn.microsoft.com/SQLExamples/Wiki/View.aspx?title=DuplicateRows Надеюсь, это будет полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...