试图将年份与大学生联系起来

时间:2013-11-26 01:29:08

标签: mysql sql case

我有以下视图,显示学生姓名,学生的学分,我刚刚添加了一个名为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;

2 个答案:

答案 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;