SQL удаляет дублированные строки с разными значениями, но сохраняет и показывает их в одной строке - PullRequest
0 голосов
/ 12 июня 2018

Есть 8000 строк, включая имя ученика, курс и оценки.Всего есть 4 курса, то есть для каждого студента максимум 4 ряда.Поэтому я хотел бы создать таблицу с разными именами учеников и показать разные оценки в одной строке, как показано ниже:

enter image description here

Большое спасибо.

PS.Из ваших первоначальных ответов я заметил, что это нелегкая задача.Так могу ли я иметь таблицу, показывающую только учеников с более чем одним классом, так как меня не интересуют ученики только с одним классом?как это: enter image description here

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Это, безусловно, сработает, просто нужно добавить еще одно объединение на другом курсе

SELECT n.name, N.course, N.grade, E.course, E.grade, I.course, I.grade
FROM (
    SELECT DISTICT name
    FROM STUDENT
    ) N
LEFT JOIN (
    SELECT name, course, grade
    WHERE course = MATH
    ) M
    ON (N.name = M.name)
LEFT JOIN (
    SELECT name, course, grade
    WHERE course = ENGLISH
    ) E
    ON (N.name = E.name)
LEFT JOIN (
    SELECT name, course, grade
    WHERE course = IT
    ) I
    ON (N.name = I.name)

надеюсь, это поможет ..

0 голосов
/ 12 июня 2018

Вы можете сделать условное агрегирование:

select name,
       max(case when seq = 1 then Course end) as Course1,
       max(case when seq = 1 then Grade end) as Course1Grade, 
       max(case when seq = 2 then Course end) as Course2,
       max(case when seq = 2 then Grade end) as Course2Grade,
       . . . 
from (select *, row_number() over (partition by name order by course) as seq
      from table
     ) t
group by name;
...