Несколько таблиц SQL Server Pivot - PullRequest
0 голосов
/ 30 января 2012

У нас есть следующие таблицы:

Таблица 1: Student_Records
StudentID | CourseID | Период | Оценка
12 6010 P1 90

23 6020 P1 80

12 6030 P2 '' Бланк, оценки нет

15 6010 P1 70

12 6020 P1 80

15 6020 P1 90

Таблица 2: Course_Records
CourseID CourseDec Кредиты
6010 Математика 3

6020 Биология 3

6030 Английский 3

Таблица 3: Student_Info
StudentID FirstName Фамилия ClassYear
12 Джо Смит 2013

15 Чак Ли 2013

23 Pete Vo 2013


Результат Желание:
ClassYear LastName FirstName StudentId Math Биология
2013 Смит Джо 12 90 80
2013 Ли Чак 15 70 90

Как мне достичь этого результата с помощью команды pivot?

Ответы [ 3 ]

0 голосов
/ 30 января 2012

Вы можете использовать PIVOT для этого, но для этого требуется, чтобы вы знали, какие описания курсов вас интересуют.

SELECT p.classyear, 
       p.lastname, 
       p.firstname, 
       p.studentid, 
       pvt.math, 
       pvt.biology 
FROM   (SELECT sr.grade, 
               si.classyear, 
               si.studentid, 
               si.firstname, 
               silastname 
        FROM   student_info si 
               INNER JOIN student_records sr 
                 ON si.studentid = sr.studentid 
               INNER JOIN course_records cr 
                 ON sr.courseid = cr.courseid) p PIVOT ( AVG (grade) FOR 
       coursedec IN ( 
       [Math], [Biology]) ) AS pvt 
ORDER  BY pvt.classyear; 
0 голосов
/ 30 января 2012

http://data.stackexchange.com/stackoverflow/query/60493/http-stackoverflow-com-questions-9068600-sql-server-pivot-mulitple-tables

DECLARE @Student_Records AS TABLE (
  studentid INT,
  courseid  INT,
  period    VARCHAR(2),
  grade     INT);

INSERT INTO @Student_Records
VALUES      (12,
             6010,
             'P1',
             90),
            (23,
             6020,
             'P1',
             80),
            (12,
             6030,
             'P2',
             NULL),
            (15,
             6010,
             'P1',
             70),
            (12,
             6020,
             'P1',
             80),
            (15,
             6020,
             'P1',
             90);

DECLARE @Course_Records AS TABLE (
  courseid  INT,
  coursedec VARCHAR(50),
  credits   INT);

INSERT INTO @Course_Records
VALUES      ( 6010,
              'Math',
              3),
            ( 6020,
              'Biology',
              3),
            ( 6030,
              'English',
              3);

DECLARE @Student_Info AS TABLE (
  studentid INT,
  firstname VARCHAR(50),
  lastname  VARCHAR(50),
  classyear INT);

INSERT INTO @Student_Info
VALUES      (12,
             'Joe',
             'Smith',
             2013),
            (15,
             'Chak',
             'Li',
             2013),
            (23,
             'Pete',
             'Vo',
             2013);

SELECT DISTINCT coursedec
FROM   @Course_Records AS cr
       INNER JOIN @Student_Records sr
         ON sr.courseid = cr.courseid
WHERE  sr.grade IS NOT NULL;

SELECT classyear,
       lastname,
       firstname,
       summary.studentid,
       summary.math,
       summary.biology
FROM   (SELECT *
        FROM   (SELECT si.studentid,
                       coursedec,
                       grade
                FROM   @Course_Records AS cr
                       INNER JOIN @Student_Records sr
                         ON sr.courseid = cr.courseid
                       INNER JOIN @Student_Info si
                         ON si.studentid = sr.studentid
                WHERE  sr.grade IS NOT NULL) AS results PIVOT (AVG(grade) FOR
               coursedec
               IN (
               [Math], [Biology])) AS pvt) AS summary
       INNER JOIN @Student_Info si
         ON summary.studentid = si.studentid

Обратите внимание, что вы можете использовать динамический HTML для корректировки запроса при добавлении новых курсов:

Сводная таблица и объединенные столбцы

0 голосов
/ 30 января 2012

Запросите числа и курсы с объединением, чтобы вы получили

StudentID CourseDec Grade
1         Math      20
1         Woodwork  82

Pivot, который вы в итоге получите

StudentID Math WoodWork
1         20   82

Затем присоединитесь к студенту, чтобы получить имяAlst Name и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...