У меня возникли проблемы с получением внешнего соединения для работы: у меня были такие работы, как я ожидал в MS Access в прошлом, но получение подобной вещи, происходящей в SQL Server, дает меня беспокоит.Ошибка внешнего соединения SQL Server
У меня есть таблица баллов, которые применяются к каждому студенту, как:
+-------------+------------+-------+
| StudentID | StandardID | Score |
+-------------+------------+-------+
| 100 | 1011 | 1 |
| 100 | 1012 | 2 |
| 101 | 1011 | 3 |
Каждый студент может иметь много очков, и каждая оценка относится к одному стандарту. Кроме того, каждый студент может принадлежать к одной или нескольким группам, которые содержатся в другой таблице, группы:
+-------------+------------+
| StudentID | GroupID |
+-------------+------------+
| 100 | 83 |
| 101 | 83 |
То, что я хочу сделать, это извлечь информацию счет и фильтровать по группам: этот набор данных, то будет совпадающая с помощью StudentID до правильной записи в другом месте. Однако для каждого полученного набора данных для любого данного учащегося должно быть точно такое же количество строк: по одному для каждого стандарта. В идеале это (для приведенных выше данных):
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
Любая помощь будет удивительно!
как насчет 'внешнего соединения' внутри' подзапроса'. Неужели вы это попробовали? –