一个表里有三个字段,语言,数学,英语,三门课程的成绩分别为70、80、58,要你写语输出三门课程的成绩(不过成绩是要用优秀、及格、不及格来显示的)大于80分为优秀、60分以上为及格、60分以下为不及格。要求写出SQL语句和思路。

解决方案 »

  1.   

    SQL> create table grade(language number,math number,english number);Table created.SQL> insert into grade values(70,80,58);1 row created.SQL> commit;Commit complete.SQL> select * from grade;  LANGUAGE       MATH    ENGLISH
    ---------- ---------- ----------
            70         80         58
    SQL> select
      2  decode(sign(language-80+1),1,'优秀',decode(sign(language-60+1),1,'及格','不
    及格')) "语言",
      3  decode(sign(math-80+1),1,'优秀',decode(sign(math-60+1),1,'及格','不及格'))
    "数学",
      4  decode(sign(english-80+1),1,'优秀',decode(sign(english-60+1),1,'及格','不及
    格')) "英语"
      5  from grade;语言     数学     英语
    ------ ------ ------
    及格   优秀     不及格SQL>
      

  2.   

    decode 好像只有Oracle可以用。 能不能只用标准SQL语句写。 谢谢!
      

  3.   

    select case when language > 80 then '优秀' when language <= 80 and language > 60 then '及格'
    else '不及格' end "语文"
    from t;#1的思路很有意思.
      

  4.   

    呵呵 还是你这样用CASE简洁明了一些
    我以前只知道CASE的一种语法格式
    CASE search_expression
    WHEN expression1 THEN result1
    WHEN expression2 THEN result2
    ...
    WHEN expressionN THEN resultN
    ELSE default_result
    END刚才看了你的回帖去查了一下 才知道了另外一种
    CASEWHEN condition1 THEN result1
    WHEN condistion2 THEN result2
    ...
    WHEN condistionN THEN resultN
    ELSE default_result
    END
      

  5.   

    当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html