中软的面试题,大家帮我写2条SQl语句,当场没有做出来,真是哭死了。
1.有一张Student表和一张成绩表。
  学生表  成绩表要求查出选课数目大于或等于5学生的学号和姓名,并按平均成绩的降序排列。我自己努力了半天也没有做出来,大家帮帮做做。
2.表还是上面的成绩表,要求查出某个个学生所选的课程的课程号,比方说95006号学生,要求的输出结果是
   1,2,3,4,5,6,7
 用逗号隔开,而且是横向的,不是一列的,不是下面这样的
  cno
   1
   2
   3
   4
   5
   6
   7

解决方案 »

  1.   

    重写一次,图片没有显示出来。
    中软的面试题,大家帮我写2条SQl语句,当场没有做出来,真是哭死了。 
    1.有一张Student表和一张成绩表。 
      学生表 
      sno   sname  
      95001  张三    
      95002  李四
      95003  王五 
      95004  赵六
      95005  郑七
      95006  刘八        
     
      成绩表
      cno      cno    score
      95001     1       89
      95001     2       78
      95002     1       68
      95003     4       85
      95004     5       78
      95005     1       78
      95005     2       45
      95005     3       78
      95005     4       68
      95005     5       65
      95006     1       79
      95006     2       78
      95006     3       96
      95006     4       57
      95006     5       85
      95006     6       84
      95006     7       67 
     
    要求查出选课数目大于或等于5学生的学号和姓名,并按平均成绩的降序排列。我自己努力了半天也没有做出来,大家帮帮做做。 
    2.表还是上面的成绩表,要求查出某个个学生所选的课程的课程号,比方说95006号学生,要求的输出结果是 
      1,2,3,4,5,6,7 
    用逗号隔开,而且是横向的,不是一列的,不是下面这样的 
      cno 
      1 
      2 
      3 
      4 
      5 
      6 
      7
      

  2.   

    选课数目大于或等于5学生的学号和姓名,并按平均成绩的降序排列select sno,sname from 学生表,
    (select scno,avg(grade) grade2 from 成绩表 group by scno having count(cno)>=5) a
    where sno=scno order by grade2 desc
      

  3.   

    要求查出某个个学生所选的课程的课程号CREATE FUNCTION ConvertVtoH(@Col1Val varchar(50))
    RETURNS VARCHAR(8000)
    AS
    BEGIN 
    DECLARE @RetVal varchar(8000)
    SET @RetVal = ''
    SELECT @RetVal = cno + ',' + @RetVal FROM 成绩 WHERE scno = @Col1Val

    IF LEN(@RetVal) > 0
    SET @RetVal = LEFT(@RetVal, LEN(@RetVal) - 1)

    RETURN @RetVal
    ENDSELECT top 1 dbo.ConvertVtoH(scno) cno FROM 成绩 where scno='1002'