Показать все строки, где значение появляется хотя бы один раз в группе

У меня есть запрос SQL, который приводит к следующему. RN - это номер строки каждого раза, когда у нас есть транзакция с одним из следующих идентификаторов. Я просто хочу видеть идентификаторы людей, которые имеют значение "A" в группе.

Я попытался сделать оператор WHERE, но это просто заставило бы меня получить строки с A ... Я хочу увидеть все строки идентификаторов, где "A" появлялось хотя бы один раз в GROUP.

Будет ли это работать в подзапросе?

RN    ID    GROUP
1     001   A
2     001   B
3     001   B
1     002   B
2     002   B

Всего 3 ответа


Настройка теста (обратите внимание, что группа является зарезервированным словом)

create table t(rn NUMERIC(2), id varchar (3), thegroup char)

insert t values(1,顙','A')
insert t values(2,顙','B')
insert t values(3,顙','B')
insert t values(1,顚','B')
insert t values(2,顚','B')

Требуемый запрос

select *
from t
where id in (
  select id
  from t
  where thegroup in ('A')
)

Результат

rn |id  |thegroup |
---|----|---------|
1  |001 |A        |
2  |001 |B        |
3  |001 |B        |

Попробуйте использовать предложение " HAVING ".


Просто еще один вариант. Для этого типа логики мне нравится WHERE EXISTS потому что очевидно, что вы делаете с запросом. Удобно через шесть месяцев или шесть лет, когда вам придется пересмотреть код.

Псевдонимы o и i предназначены для Outer таблицы и Inner таблицы по отношению к подзапросу.

select
  o.RN,
  o.ID,
  o.[GROUP]
from 
  mytable as o
where 
  exists(select 1
         from mytable as i
         where i.ID = o.ID
         and i.[GROUP] = 'A');

Rextester Demo


Есть идеи?

10000