0

私は、大学卒業生の Access データベースを受け取りました。これには、各生徒が通った学校の詳細、特にこれらの学校が公立学校か有料学校かが含まれています。関連するテーブルの構造の簡略化されたバージョンを次に示します。

学生ID AgeStart AgeFinish State_Feed
-------------------------------------------------- ----------
23 5 10 状態
23 10 18 状態
24 6 9 状態
24 9 12 手数料
24 12 18 手数料

主キーは StudentID+AgeStart であるため、同じ学生のレコードが複数の行にまたがって格納されます。たとえば、上の学生 23 は 2 つの学校 (両方とも公立学校) に通っています。学生 24 は 3 つの学校に通い、そのうちの 1 つは州立学校、2 つは有料の学校でした。

私は質問をする必要があります: 学校教育全体を私立/有料教育に費やした人は何人ですか? これらの人々をSQLで選択することは可能ですか? 学生は世界中から来ており、学校の開始と終了の年齢が異なるため、苦労しています。「この ID のすべてのオカレンスに対して State_paid=2 の StudentID を選択してください」と言うことができる必要があります。誰でもアイデアはありますか?

4

2 に答える 2

1

この質問に答える別の方法は、having句で集計を使用することです。このようなタイプのクエリではより一般的であるため、私はこのアプローチを好みます。(これは set-within-sets クエリの例です。)

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

句が行っているのは、各 の発生having回数を数えることです。そのようなレコードがない場合、Aはテストに合格します。"state"StudentIdStudentId

于 2013-11-03T23:40:49.780 に答える
1

これにより、公立学校に通ったことのないすべての生徒が検索されます。

SELECT DISTINCT StudentID FROM alumni
WHERE StudentID NOT IN (
    SELECT StudentID FROM alumni WHERE State_Fee = 'state'
)
于 2013-11-03T22:41:03.807 に答える