今天,我们正在研究SQL服务器查询,并在一个简单的逻辑中面对一个小问题。我们有一个有3列的表。您可以看到表格的结构,如下所示。
ID | Name | FKId
1 a 1
2 b 1
3 c 1
4 a 2
5 b 2
6 a 3
7 c 3
8 b 5
9 c 5
在上表中,您可以看到一个列'Name',它有三种不同类型的值a,b,c和'FKId'是一个外键列。在我们的结果中,我们需要那些行,其中我们将'Name'列值组合为a,b和a,c用于每个'FKId'。没有其他组合被接受。在上表中,我们需要以下结果。
ID | Name | FKId
4 a 2
5 b 2
6 a 3
7 c 3
答案 0 :(得分:1)
我会做这样的事情:
with fkids as (
select fkid,
max(case when name='a' then 1 else 0 end) as has_a,
max(case when name='b' then 1 else 0 end) as has_b,
max(case when name='c' then 1 else 0 end) as has_c
from table
group by fkid
)
select table.* from table
join fkids on
fkids.fkid = table.fkid and (
(has_a = 1 and has_b = 1 and has_c = 0) or
(has_a = 1 and has_b = 0 and has_c = 1)
)