Reputation: 25
I have two separate result sets I want to combine in a one final result
(I)
SELECT * FROM
(
SELECT T_Student_History.StudenID,
Convert(varchar(11), MAX(T_Student_History.Created),101)AS 'Student Last entry',
'History' AS 'Subject Name'
FROM T_Student_History
Group BY T_Student_History.StudentID
UNION ALL
SELECT T_Student_geography.StudentID,
Convert(varchar(11), MAX(T_Student_geography.Created),101)AS 'Student Last entry',
'Geography' AS 'Subject Name'
FROM T_Student_geography
Group BY T_Student_geography.StudentID
Union ALL
SELECT T_Student_Computing.StudentID,
Convert(varchar(11), MAX(T_Student_Computing.Created),101)AS 'Student Last entry',
'Computing' AS 'Subject Name'
FROM T_Student_Computing
Group BY T_Student_Computing.StudentID
) AS T_AllSubjects
(II)
SELECT T_Students.Forename+' '+T_Students.Surname AS 'Student Description',
T_Students.Email,
T_Students.Mobile,
FROM T_Students
I want a result like:
forename surname mobile StudentID Student Last Entry Subject Name
-------- ------- ------ --------- ------------------ ------------
Upvotes: 0
Views: 806
Reputation: 8729
You should be able to INNER JOIN them like this:
SELECT
T_Students.StudentID
T_Students.Forename+' '+T_Students.Surname AS 'Student Description',
T_Students.Email,
T_Students.Mobile,
T_AllSubjects.StudentLastEntry
T_AllSubjects.Subject Name
FROM T_Students
INNER JOIN (SELECT *
FROM
(
SELECT
T_Student_History.StudentID,
Convert(varchar(11), MAX(T_Student_History.Created),101)AS StudentLastEntry,
'History' AS SubjectName
FROM T_Student_History
GROUP BY T_Student_History.StudentID
UNION ALL
SELECT
T_Student_geography.StudentID,
Convert(varchar(11), MAX(T_Student_geography.Created),101)AS StudentLastEntry,
'Geography' AS SubjectName
FROM T_Student_geography
GROUP BY T_Student_geography.StudentID
UNION ALL
SELECT T_Student_Computing.StudentID,
Convert(varchar(11), MAX(T_Student_Computing.Created),101)AS StudentLastEntry,
'Computing' AS SubjectName
FROM T_Student_Computing
GROUP BY T_Student_Computing.StudentID
)
) T_AllSubjects
ON T_Students.Studentid = T_AllSubjects.StudentID
Upvotes: 1
Reputation: 5294
If im understanding you correctly I think you want to use WITH here so something like:
WITH T_Subjects AS
(
SELECT T_Student_History.StudenID,
Convert(varchar(11), MAX(T_Student_History.Created),101)AS 'Student Last entry',
'History' AS 'Subject Name'
FROM T_Student_History
Group BY T_Student_History.StudentID
UNION ALL
SELECT T_Student_geography.StudentID,
Convert(varchar(11), MAX(T_Student_geography.Created),101)AS 'Student Last entry',
'Geography' AS 'Subject Name'
FROM T_Student_geography
Group BY T_Student_geography.StudentID
Union ALL
SELECT T_Student_Computing.StudentID,
Convert(varchar(11), MAX(T_Student_Computing.Created),101)AS 'Student Last entry',
'Computing' AS 'Subject Name'
FROM T_Student_Computing
Group BY T_Student_Computing.StudentID
)
Then just do:
SELECT
T_Students.StudentID
T_Students.Forename+' '+T_Students.Surname AS 'Student Description',
T_Students.Email,
T_Students.Mobile,
T_Subjects.StudentLastEntry
T_Subjects.Subject Name
FROM T_Students
LEFT OUTER JOIN T_Subjects ON T_Students.StudentID = T_Subjects.StudentID
Upvotes: 2