SQL-запрос, чтобы найти конкретное значение для всех записей

0
Col1;Col2;Col3
12345;01;Y
12345;02;Y
12345;03;Y
22222;01;Y
22222;02;Y
22222;03;N
33333;01;N
44444;01;Y

Нужна помощь в написании SQL-запроса, чтобы найти все записи со значением = 'Y' на основе col1.For. Выбор вывода. Col1 должен давать выходные данные как 12345 и 44444 [не 22222 и 33333, так как col3 содержит "N" для них]

Большое спасибо за ваше время

  • 2
    Добавьте условие where со значением столбца как «Y». Вы должны опубликовать запрос, который вы уже пробовали, прежде чем просить о помощи.
  • 0
    используйте предложение GROUP BY
Теги:
partitioning

4 ответа

2

Я думаю, вам нужен col1 где все значения col3 должны быть Y

select col1
from demo
group by col1
having count(*) = sum(Col3 = 'Y')

демонстрация

Или, если может быть только два возможных значения для col3 как Y/N, то вы можете упростить, having положение в

having sum(Col3 = 'N') = 0

демонстрация

  • 1
    Возможно, чтобы уточнить, это зависит от результата true чтобы быть 1 и false чтобы быть 0, то есть это может быть расширен как sum(case when Col3 = 'Y' then 1 else 0 end)
  • 0
    Извините, но сумма не возможна для нечисловых столбцов
Показать ещё 1 комментарий
1

мое решение с использованием разницы

select distinct col1 from demo where col1 not in 
(select col1 from demo where col3='N')
  • 1
    Я не видел решения соринэца перед публикацией. Я с ним согласен
1

Один простой подход использует условную агрегацию:

SELECT Col1
FROM yourTable
GROUP BY Col1
HAVING MAX(Col3) = MIN(Col3) AND MAX(Col3) = 'Y';
1

Мое решение:

select distinct col1
from mytable
where col3='Y'
and col1 not in (select distinct col1 from mytable where col3='N')

Ещё вопросы

Сообщество Overcoder
Наверх
Меню