2017-06-17 460 views
2

这可能很简单,但我只是没有得到它。我是通过sql查询的新组,但对sql选择有一个基本的了解。SQLServer选择查询GROUP BY HAVING跨两个字段

我有一个简单的表像所谓的主题:

Student | Interviewer | Topic 
========================================== 
Chuck | Susan  | Project Management 
Jill | Jack  | Microsoft Word 
Chuck | Jack  | Microsoft Word 
Bobby | Jane  | Project Management 
Jill | Jack  | Python Scripting 

这是样本数据。

对于每次采访,将为每个涵盖的主题添加一行。一些学生接受了多名访谈员的采访,一些访谈仅涵盖一个主题,另一些则涵盖多个主题。

我正在尝试编写一个查询,该查询返回学生和Interviewer对,这些对仅由一个人接受过采访,但已被问及关于多个主题的问题。

因此,对于上面的示例数据,我只是回来一行:(杰尔,杰克)。

我已经尝试过各种各样的组合和有sql查询,但没有人返回我想要的。我认为在通过查询分组时,我错过了一些东西。我已经阅读了多个关于group by的网站,并且已经搜索了其他堆栈溢出问题,但它只是不点击。

+0

样品数据和预期结果请。 –

+0

@vkp新增数据和结果 – lovefaithswing

回答

3

你可以用group byhaving来做到这一点。

select student,max(interviewer) --or min(interviewer) as there will only be one interviewer 
from tbl 
group by student 
having count(distinct interviewer) = 1 and count(topic) > 1 
+0

谢谢!我错过了“max()”和“distinct”。 – lovefaithswing

0

我只想指出count(distinct)可能是昂贵的。替代方案是:

select t.student, max(t.interviewer) 
from tbl t 
group by t.student 
having min(interviewer) = max(interviewer) and 
     min(topic) <> max(topic);