SQL group by where where condition

时间:2016-08-10 10:43:42

标签: sql sql-server

我有这样一张桌子

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
---------

4 个答案:

答案 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