2013-11-03 143 views
0

我已經獲得了大學校友的Access數據庫。它包含每個學生都去過的學校的詳細信息,特別是這些學校是州立學校還是付費學校。下面是相關表的結構的簡化版本:SQL:在代表同一個人的多個記錄中查詢

 
StudentID AgeStart AgeFinish State_Fee 
----------------------------------------------------------- 
23   5   10   state 
23   10   18   state 
24   6   9   state 
24   9   12   fee 
24   12   18   fee 

主鍵是StudentID + AgeStart,所以對於相同的學生記錄被存儲在多個行例如上面的學生23參加了兩所國立學校的學校。學生24參加了三所學校,其中一所州和兩所學校繳費。

我需要問一個問題:有多少人在私立/付費教育中度過了他們的整個學校?可以在SQL中選擇這些人嗎?我很掙扎,因爲來自世界各地的學生和不同年齡段的開辦和終止學校。我需要能夠說'選擇StudentIDs,其中State_paid = 2的所有這些ID的發生'。任何任何想法?

回答

1

這會找到所有從未進入州立學校的學生。

SELECT DISTINCT StudentID FROM alumni 
WHERE StudentID NOT IN (
    SELECT StudentID FROM alumni WHERE State_Fee = 'state' 
) 
+0

非常感謝!這太妙了。我一直在用它敲打我的頭。 – MartinC

+0

@ user2950853,以供將來參考,也閱讀關於'EXISTS'(非常相似)。 –

+0

好的,我會研究一下。謝謝! – MartinC

1

的另一種方法來回答這個問題是使用聚合與having條款。我更喜歡這種方法,因爲它對於這些類型的查詢更普遍。 (這是一組中之集的查詢的一個例子。)

select StudentId 
from t 
group by StudentId 
having sum(iif(State_Fee = "state", 1, 0) = 0; 

什麼having子句正在做的是計數該"state"發生每個StudentId的次數。當沒有這樣的記錄時,A StudentId通過測試。

相關問題