2017-06-17 99 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);