外部結合を機能させるのに少し問題があります。過去に MS Access で期待どおりに機能させましたが、SQL Server で同様のことが起こって問題が発生しています。
次のような各生徒に適用されるスコアの表があります。
+-------------+------------+-------+
| StudentID | StandardID | Score |
+-------------+------------+-------+
| 100 | 1011 | 1 |
| 100 | 1012 | 2 |
| 101 | 1011 | 3 |
各生徒には多くのスコアがあり、各スコアは 1 つの標準に関連付けられています。さらに、各学生は、別のテーブル グループに含まれる 1 つ以上のグループに属する場合があります。
+-------------+------------+
| StudentID | GroupID |
+-------------+------------+
| 100 | 83 |
| 101 | 83 |
私がやりたいことは、スコア情報を抽出し、グループごとにフィルター処理することです。このデータセットは、StudentID によって他の場所の正しいレコードと照合されます。ただし、特定の生徒について取得したデータセットごとに、正確に同じ数の行 (標準ごとに 1 つ) が必要です。理想的にはこれ(上記のデータの場合):
StudentID = 100
+------------+-------------+------------+-------+
| StandardID | StudentID | GroupID | Score |
+------------+-------------+------------+-------+
| 1011 | 100 | 83 | 1 |
| 1012 | 100 | 83 | 2 |
StudentID = 101
+------------+-------------+------------+-------+
| StandardID | StudentID | GroupID | Score |
+------------+-------------+------------+-------+
| 1011 | 101 | 83 | 3 |
| 1012 | 101 | 83 | NULL | <--Can't get this to happen
必要なリストを取得できますが、そこには NULL 行はありません。さらに別の例として、ある生徒のスコアが 4 つあるのに、別の生徒のスコアが 1 つしかない場合でも、クエリによって 4 つの行が返される必要があり、スコアがない場合は NULL が含まれます。
これは私がこれまでに試したことです(もう少し冗長ですが、本質的に):
SELECT Standards.StandardID, scores.StudentID, scores.TestDate, scores.Score,
scores.Assessment
FROM scores RIGHT OUTER JOIN
(SELECT scores_1.StandardID
FROM scores AS scores_1 INNER JOIN studentGroups
ON scores_1.StudentID = studentGroups.StudentID
WHERE (studentGroups.GroupID = 83)
GROUP BY scores_1.StandardID) AS Standards
ON scores.StandardID = Standards.StandardID
WHERE scores.StudentID = 100
どんな助けでも素晴らしいでしょう!