我有这样一张桌子
TestID SectionID Section
-------------------------------
1 5 1
1 6 2
2 7 1
2 8 2
3 9 1
4 10 1
4 11 2
5 12 2
6 13 1
6 14 2
7 15 2
8 16 1
8 17 2
---------------------------------
方案是使用 sectionID 12和15 返回testID。因此条件是返回非重复testID且该部分应为2 的行。因此,对于那里的testIDs(分别为5和7),只有那个testid 5和7的行,并且那里的部分是2.第3行不会被选中,因为即使它的testid没有重复,但是它的部分是的 1
我尝试使用group by
select testid, count(section)
from #temp
where section = 2
group by testid, section
having count(section) = 1
但它返回了错误的证词。
以下是我尝试过的数据的代码段。
create table #temp (testid int,sectionid int,section int)
insert into #temp (testid,sectionid,section)
values (1,5,1),(1,6,2),(2,7,1),(2,8,2),(3,9,1),(4,10,1),(4,11,2),(5,12,2),(6,13,1),(6,14,2),(7,15,2),(8,16,1),(8,17,2)
select testid,count(testid) from #temp where section=1
group by testid having count(testid)=1
所以预期的结果是
TestID
---------
5
7
---------
答案 0 :(得分:2)
我认为这是条件:
select testid
from #test t
group by testid
having count(*) = 1 and
min(section) = 2;
第一个条件检查只有一行。第二个条件检查行中的section
值是" 2"。请注意,只有一行,您可以使用min()
或max()
。
答案 1 :(得分:0)
你的SELECT语句几乎是正确的,你只需从GROUP BY条件中删除部分:
select testid, count(section)
from #temp
where section=2
group by testid
having count(section)=1
答案 2 :(得分:0)
您可以使用分析功能
select testid,sectionid,section from
(
select testid,count(*) over (partition by testid) c,sectionid,section
from #temp
) a
where c=1
and section=2
首先,我们计算子选择中的行pr testid,并根据计数和section = 2
计算过滤器答案 3 :(得分:0)
放置条件错误的地方
select #temp.testid from #temp inner join
( select testid,count(0) as count from #temp group by testid having count(0)=1 ) A
ON A.testid = #temp.testid AND #temp.section<>1