1

我正在尝试编写一个简单的查询来获取如下所示的数据集:

    ID  |  Col2
    X      B 
    X      C
    Y      B
    Y      D

并返回:

    ID | Col2 | Col3
    X    B      C
    Y    B      D

本质上,我有一个 ID 列,它可以在 Col2 中包含 B、C 或 D。我试图确定哪些 ID 只有 B 和 D。我有一个查询可以找到两者,但不仅仅是那个组合。询问:

select ID, Col2
from Table1
where ID in (
  select ID from Table1
  group by ID
  having count(distinct Col2) = 2) 
order by ID

或者,我可以使用帮助来找到一种方法来过滤 B 和 D 上的查询并忽略 B 和 C。我可能已经看到了自联接,但不知道如何实现它。

谢谢!

编辑:对于给定的 ID,大多数数据集具有 B、C 和 D 的所有三个。这里的目标是隔离缺少一个的 ID,即缺少 C。

4

1 回答 1

1

我正在尝试确定哪些 ID 只有 B 和 D。我有一个查询要找到两者

如果这是您想要的,则不需要多列:

select id
from table1
where col2 in ('B', 'D')
group by id
having count(distinct col2) = 2;

如果您 'B'想要而不想要'D'其他人,那么:

select id
from table1
group by id
having sum(case when col2 = 'B' then 1 else 0 end) > 0 AND
       sum(case when col2 = 'C' then 1 else 0 end) > 0 AND
       sum(case when col2 not in ('B', 'D') then 1 else 0 end) = 0;

如果只有两列,您还可以使用聚合轻松旋转值:

select id, min(col2), nullif(max(col2), min(col2))
from table1
group by id;
于 2021-04-19T16:31:39.423 回答