Объедините 2 отдельных набора результатов, используя SQL - PullRequest
0 голосов
/ 17 октября 2011

У меня есть два отдельных набора результатов, которые я хочу объединить в один окончательный результат

(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 ]

2 голосов
/ 17 октября 2011

Если я вас правильно понимаю, я думаю, что вы хотите использовать WITH здесь, что-то вроде:

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
1 голос
/ 17 октября 2011

Вы должны быть в состоянии присоединиться к ним, как это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...