2013-11-26 2 views
0

У меня есть следующее представление, в котором показано имя студента, кредиты, которые имеет ученик, и я просто добавил столбец с именем year, установленным в 0.Попытка сопоставить годы студентам университетов

+------------------+---------+------+ 
| StudentName  | Credits | Year | 
+------------------+---------+------+ 
| Jon Macleod  |  0 | 0 | 
| Carrie Gregory |  0 | 0 | 
| Matt Hayden  |  0 | 0 | 
| Emily Scarlett |  10 | 0 | 
| Hailey Taylor |  10 | 0 | 
| Tj Davidson  |  10 | 0 | 
| Alex Harry  |  20 | 0 | 
| Matt Tosh  |  20 | 0 | 
| Mitchell Gallant |  20 | 0 | 
| Jon Harris  |  30 | 0 | 
| Casey Macky  |  30 | 0 | 
| James Doolittle |  30 | 0 | 
+------------------+---------+------+ 

Я хочу сделать так, чтобы, когда студент имеет 0 кредитов, они являются первым годом. когда у ученика 10 кредитов, они 2-го года и т. д.

У меня есть следующий скрипт, но я не могу понять, почему он не работает.

CREATE OR REPLACE VIEW Year AS 
SELECT S.stu_name AS StudentName, SUM(Credits) AS Credits, 0 AS Year 
     FROM Student AS S JOIN Enrollment AS E 
     ON S.stu_id = E.stu_id 
     Case 
      when (Year = '0' and Credits = 0 then 'FirstYear' 
      when (Year = '0' and Credits = 10 then 'SecondYear' 
      else Year 
     end as Year 
     GROUP BY S.stu_id 
     ORDER BY Credits; 
+0

Что произойдет, если у двух учеников одноименное имя? – Shomz

+0

Начать с SELECT studentname, case when etc from ... – Strawberry

+0

У меня также есть студенческие идентификаторы, связанные со студентами. В этом примере я только что показал имена – Godin1

ответ

1

Попробуйте это:

Как я упускают тот факт, что MySql оленья кожа позволяет подзапросов здесь является правильным решением:

CREATE OR REPLACE VIEW Year AS 
    SELECT S.stu_name AS StudentName, SUM(Credits) AS Credits, 
      Case When SUM(Credits)=0 then 'First Year' 
       When SUM(Credits)=10 then 'Second Year' 
       When SUM(Credits)=20 then 'Third Year' 
       When SUM(Credits)=30 then 'Fourth Year' 
       When SUM(Credits)=40 then 'Fifth Year' 
       else '' end as year 
    FROM Student AS S INNER JOIN Enrollment AS E 
     ON S.stu_id = E.stu_id 
    GROUP BY S.stu_id 
    order by E.credits; 

Посмотри здесь на скрипке: http://sqlfiddle.com/#!2/776c3/1

+0

Спасибо. Тем не менее, я получаю сообщение об ошибке, что выбор видов содержит подзапрос в предложении FROM – Godin1

+0

Ой, я пропустил этот факт из mysql. –

+0

@ Godin1 См. Мое редактирование. –

1

Вы можете попробуйте что-то вроде этого:

SELECT S.stu_name AS StudentName, SUM(Credits) AS Credits, 
    Case Credits 
     when 0 then 'FirstYear' 
     when 10 then 'SecondYear' 
     else Year 
    end 'year' 
       FROM student AS S 
    GROUP BY S.stu_id 
    ORDER BY Credits; 
Смежные вопросы