Как исключить определенные пары строк с ограниченным количеством столбцов - PullRequest
0 голосов
/ 13 июля 2020

У меня есть набор данных, который выглядит так:

введите описание изображения здесь

Эти данные извлекаются прямо сейчас следующим образом:

Select * from myTable

Все строки должны остаться, кроме первых двух, потому что это пары строк с одинаковым именем пакета, но у второго есть код CMPL. Таким образом, если есть пакет с кодом FAIL и у него есть соответствующая строка кода CMPL, тогда они отменяют друг друга, и оба должны быть отфильтрованы. Сложность состоит в том, чтобы оставить все остальные строки с пакетами с кодом FAIL и удалить только эту конкретную пару.

Используя предложение WITH, я пробовал EXISTS, LEAD, LAG и ROWNUM, но ни один из этих подходов, похоже, не работает работают, насколько я могу судить. Каким-то образом должен быть способ определить, существуют ли эти пары строк для процесса, в котором одна из строк является CMPL, чтобы эту пару строк можно было удалить.

Этот набор данных выглядит по-разному каждый день. Иногда в пакете есть несколько пар строк, как я описал. Иногда их нет. Это базовый пример c.

Есть ли способ определить, появляется ли одна из этих пар строк, и удалить их?

1 Ответ

1 голос
/ 13 июля 2020

Вы можете использовать except в сочетании с exists.

 
SELECT *
FROM myTable
EXCEPT
/*set of rows you want to exclude*/
SELECT x.*
FROM myTable x
WHERE EXISTS (
  SELECT 1
  FROM myTable Y
  WHERE Y.Package_Name = x.Package_Name
  AND y.Code =‘CMPL’
)
AND x.Code = ‘FAIL’
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...