Сортируйте идентификаторы при обращении к делу - PullRequest
0 голосов
/ 14 июля 2020

Как отсортировать идентификаторы, когда у меня есть таблица типа

CAR
ID      COLOR
1       Red
1       Black
2       BLUE
2       Black
3       Yellow
3       Red

Моя цель состоит в том, чтобы все идентификаторы, имеющие цвет «Красный», были выброшены, так что только ID = 2 будет мой результат. С моим SQL я могу найти идентификаторы, которые имеют красный цвет с Filter = 1, но они все еще отображаются, потому что ID = 1 может также иметь черный цвет (или ID = 3 может иметь желтый цвет), так что Filter = 0 и передается.

with SORTOUT as
(
ID,
CASE WHEN
COLOR = RED THEN 1
ELSE 0
END AS FILTER
FROM TABLE
)
SELECT * FROM ID_TABLE T1
JOIN SORTOUT T2 on (T1.ID = T2.ID)
WHERE FILTER = 0

Ответы [ 3 ]

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

Если вам нужен только идентификатор, используйте агрегацию:

select id
from id_table
group by id
having sum(case when color = 'RED' then 1 else 0 end) = 0;

Если вам нужны исходные строки, вы можете использовать not exists:

select i.*
from id_table i
where not exists (select 1
                  from id_table i2
                  where i2.id = i.id and i2.color = 'RED'
                 );
0 голосов
/ 14 июля 2020

Для этого вы можете использовать простой запрос выбора,

SELECT * FROM ID_TABLE WHERE COLOR != 'Red';

Если вам все еще нужен оператор CASE, вы можете использовать ниже

SELECT ID, COLOR, 
CASE WHEN COLOR = 'Red' THEN 1 ELSE 0 END AS Val
FROM ID_TABLE WHERE CASE WHEN COLOR = 'Red' THEN 1 ELSE 0 END = 0;

или

SELECT ID, COLOR FROM
(SELECT ID, COLOR, 
CASE WHEN COLOR = 'Red' THEN 1 ELSE 0 END AS Val
FROM ID_TABLE) qry
WHERE Val = 0;
0 голосов
/ 14 июля 2020

Другой вариант:

select id
from id_table
except
select id
from id_table
where Color = 'Red'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...