Это мой второй вопрос по SQL сегодня - я новичок в вопросах DBA ...
Я пытаюсь объединить сложный SQL-запрос, чтобы объединить данные из примерно 12 таблиц в одну таблицу. Хотя в базе данных есть отношения один ко многим, я знаю, каковы максимальные значения каждого из них.
Итак, я (с помощью переполнения стека!) Выровнял первый уровень моей базы данных и получил пару запросов, которые теперь должны быть объединены:
(в сокращенном виде)
SELECT
A.StudentId, C1.Topic AS SIoC1, C1.Level AS SIoCScore1
FROM Assessment A
LEFT JOIN Concern C1 ON A.Id = Assessment_Id and C1.TopicNumber = 1
WHERE A.Type = 'School'
SELECT
A.StudentId, C1.Topic AS PIoC1, C1.Level AS PIoCScore1
FROM Assessment A
LEFT JOIN Concern C1 ON A.Id = Assessment_Id and C1.TopicNumber = 1
WHERE A.Type = 'Parent'
Можно ли называть запросы псевдонимами?
Или как еще можно объединить эти два запроса, чтобы результат был таким:
| A.Id | SIoC1 | SIoCScore1 | PIoC1 | PIoCScore1 |
** ОБНОВЛЕНИЕ **
Домен, стоящий за этим, заключается в проведении оценки, о которой должны сообщать как школа, так и родитель. Таким образом, в единственной строке указывается оценка, в которой указаны значения School и Parent.
Я использую SQL Server 2005.
Спасибо!
* ДОПОЛНИТЕЛЬНОЕ ОБНОВЛЕНИЕ *
Этот запрос, похоже, выполняет свою работу ...
SELECT PreConcerns.StudentId, TIoC1, TIoCScore1, PIoC1, PIoCScore1
FROM
Assessment PreConcerns
LEFT OUTER JOIN
(
SELECT
P.StudentId, C1.Topic AS TIoC1, C1.Level AS TIoCScore1
FROM Assessment P
LEFT JOIN Concern C1 ON P.Id = C1.Assessment_Id and C1.TopicNumber = 1
WHERE P.Type = 'School'
) scons
ON scons.StudentId= PreConcerns.StudentId
LEFT OUTER JOIN
(
SELECT
P.StudentId, C1.Topic AS PIoC1, C1.Level AS PIoCScore1
FROM Assessment P
LEFT JOIN Concern C1 ON P.Id = C1.Assessment_Id and C1.TopicNumber = 1
WHERE P.Type = 'Parent'
) pcons
ON pcons.StudentId = PreConcerns.StudentId
ДОПОЛНИТЕЛЬНОЕ ОБНОВЛЕНИЕ (дубль 2!) **
(Я не уверен, должен ли я снова открыть это как новый вопрос ??!)
Сегодня я вернулся к работе, и обнаружил, что мое «решение» не совсем решило проблему - для каждой оценки создается две строки.
Подводя итог, у меня есть следующие таблицы:
Student (int:id, varchar(50):name)
Assessment (int:id, date:date, int:StudentId, )
Concern (int:id, int:assessment_id, varchar(20):topic, int:level)
Таким образом, для каждого учащегося в системе существует ровно две оценки - одна с типом «Школа», а другая с типом «Родитель».
Я хочу создать одну строку, которая объединяет оценки и проблемы:
(псевдостолбцы:)
| Assessment.StudentId | SchoolConcernTopic | SchoolConcernLevel | ParentConcernTopic | ParentConcernLevel |
или из sql выше:
| PreConcerns.StudentId | SIoC1 | SIoCScore1 | PIoC1 | PIoCScore1 |
Только для одного студента заполняется один ряд, который объединяет обе оценки.
У меня есть структура для работы с вышеуказанным SQL, но он возвращает две строки! И я не могу решить, как обновить это, чтобы вернуть только один - любая помощь с благодарностью получена !!
Спасибо как всегда!