为新手问题道歉。
我的数据如下:
ID|SubID|Category
1|1|Fixed
1|2|Fixed
2|1|Unfixed
2|2|Unfixed
3|1|Fixed
4|1|Unfixed
5|1|Fixed
5|2|Unfixed
我需要知道类别所在的所有ID"固定"对于所有SubID(即我希望查询返回ID 1和3)。
我该怎么做?
一个扩展,我需要知道所有类别包含"固定" AND"没有固定"对于所有SubID(即我希望查询只返回ID 5)。
提前致谢!
答案 0 :(得分:1)
您可以使用group by
+ having
条款。
我需要知道所有SubIDs的“固定”类别的所有ID
select id
from tablename
group by id
having count(*) = count(case when Category = 'Fixed' then 'X' end)
我需要知道所有子ID包含“固定”和“未固定”混合的所有ID
select id
from tablename
group by id
having count(distinct Category) = 2
答案 1 :(得分:0)
如果不存在具有未固定ID的行,则返回ID:
select distinct ID
from tablename t1
where not exists (select 1 from tablename t2
where t2.id = t1.id
and t2.Category = 'Unfixed')
问题2,混合固定和未固定:
select id
from tablename
group by id
having max(Category) <> min(Category)
即。 ID的两个不同类别,返回id。
答案 2 :(得分:0)
使用EXISTS
非常容易。
(对于那些只有Fixed
)
Select Distinct T.ID
From Table T
Where Not Exists
(
Select *
From Table T2
Where T2.ID = T.ID
And T2.Category = 'Unfixed'
)
And Exists
(
Select *
From Table T2
Where T2.ID = T.ID
And T2.Category = 'Fixed'
)
两者兼而有之:
Select Distinct T.ID
From Table T
Where Exists
(
Select *
From Table T2
Where T2.ID = T.ID
And T2.Category = 'Fixed'
)
And Exists
(
Select *
From Table T2
Where T2.ID = T.ID
And T2.Category = 'Unfixed'
)