打破 SQL 内的嵌套数据,跨多行的条件(类似于 R 中的 dcast)
Break out nested data within SQL, criteria across multiple rows (similar to dcast in R)
我正在尝试编写一个简单的查询来获取如下所示的数据集:
ID | Col2
X B
X C
Y B
Y D
和return这个:
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。
I am trying to identify which IDs only have B and D. I have a query to find both
如果这是您想要的,则不需要多列:
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;
我正在尝试编写一个简单的查询来获取如下所示的数据集:
ID | Col2
X B
X C
Y B
Y D
和return这个:
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。
I am trying to identify which IDs only have B and D. I have a query to find both
如果这是您想要的,则不需要多列:
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;