2011-10-17 39 views
0

2個獨立的結果集我有兩個單獨的結果集我想在一個最終的結果結合使用SQL

(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 

我結合想得到如下結果:

forename surname mobile StudentID Student Last Entry Subject Name 
-------- ------- ------ --------- ------------------ ------------ 

回答

2

如果我理解你c orrectly我想你要在這裏使用,因此類似:

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 
) 

然後,只需做:

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 
+0

感謝你的快速休息其實我有很多T_Students表中的連接 – user911534

+0

那麼這裏建議的任何一種方式將會一樣長,你的選項似乎是使用WITH,使用表變量然後從中選擇,或使用JOIN m方法StevieG建議,要麼將佔用大致相同的代碼量 – Purplegoldfish

+0

非常感謝您的幫助 – user911534

1

你應該能夠INNER JOIN他們是這樣的:

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 
+0

我收到錯誤「Msg 102,Level 15,State 1,Line 56 'T_AllSubjects'附近語法不正確。 T_Students.Studentid = T_AllSubjects.StudentID – user911534

+0

缺少支架..重新嘗試 – StevieG

+0

不過附近有語法錯誤)「 – user911534