2

Students2つのテーブル(およびSubjects)からいくつかの情報を収集する次のクエリがあります

SELECT 
    'StudentName' As Student,
    'Class'   As Class,
    'Subject' As Subject
    DATEDIFF( HOUR, hoursSpent.ClassStartTime, hoursSpent.ClassEndTime ) As HoursSpent
  FROM (
        SELECT stu.StudentName from Students s

        INNER JOIN Subjects  sub
        WHERE stu.StudentId = sub.StudentId
       ) hoursSpent

Studentsレイアウトのテーブルとまったく同じ別のテーブルがありますOldStudents

私の問題は、との両方のデータを組み合わせて1つとして表示したいStudentsのですOldStudentsが、どうすればそれができるのかわかりません。

私はこれを試しましたが、これは機能しません:

SELECT 
    'StudentName' As Student,
    'Class'   As Class,
    'Subject' As Subject
    DATEDIFF( HOUR, hoursSpent.ClassStartTime, hoursSpent.ClassEndTime ) As HoursSpent
  SELECT(
            FROM (
                SELECT stu.StudentName from Students s
                INNER JOIN Subjects  sub
                WHERE stu.StudentId = sub.StudentId
               ) hoursSpent,
          FROM (
                SELECT stu.StudentName from Students s
                INNER JOIN Subjects  sub
                WHERE stu.StudentId = sub.StudentId
               ) hoursSpent )
4

3 に答える 3

2

基本的に、テーブルごとに1つずつ、2つの同一のクエリを作成して使用するUNION(またはUNION ALLそれらを連結する)必要があります。

SELECT 
    'StudentName' As Student,
    'Class'   As Class,
    'Subject' As Subject
    DATEDIFF( HOUR, hoursSpent.ClassStartTime, hoursSpent.ClassEndTime ) As HoursSpent
  FROM (
        SELECT stu.StudentName from Students s

        INNER JOIN Subjects  sub
        WHERE stu.StudentId = sub.StudentId
       ) hoursSpent
UNION ALL
SELECT 
    'StudentName' As Student,
    'Class'   As Class,
    'Subject' As Subject
    DATEDIFF( HOUR, hoursSpent.ClassStartTime, hoursSpent.ClassEndTime ) As HoursSpent
  FROM (
        SELECT stu.StudentName from OldStudents s

        INNER JOIN Subjects  sub
        WHERE stu.StudentId = sub.StudentId
       ) hoursSpent

UNION結果を明確にしますが、そうでUNION ALLはありません。

于 2013-02-21T22:00:35.627 に答える
1

結合(結合)StudentsしてOldStudentsから、結果を残りのクエリに結合してみてください。

WITH AllStudents
AS (
  SELECT * FROM Students
  UNION
  SELECT * FROM OldStudents
)
SELECT 
    'StudentName' As Student,
    'Class'   As Class,
    'Subject' As Subject
    DATEDIFF( HOUR, hoursSpent.ClassStartTime, hoursSpent.ClassEndTime ) As HoursSpent
  FROM (
        SELECT stu.StudentName from AllStudents stu
        INNER JOIN Subjects  sub
        WHERE stu.StudentId = sub.StudentId
       ) hoursSpent
于 2013-02-21T22:02:44.870 に答える
0

1 つのデータ セットを別のデータ セットに追加するだけの場合は、UNION 演算子を使用します。

SELECT * FROM TableA
UNION
SELECT * FROM TableB

各 SELECT ステートメントには同じ数の列が必要です

于 2013-02-21T21:57:42.760 に答える