我有以下视图,显示学生姓名,学生的学分,我刚刚添加了一个名为year all的列,设置为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个学分时,他们是第二年等等..
我有以下脚本,但无法弄清楚它为什么不起作用。
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 :(得分: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
答案 1 :(得分: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;