select a.*,b.科目,b.成绩 from student a left join score b on a.学号=b.学号 and b.成绩>=60 order by b.科目

解决方案 »

  1.   

    select a.学号,a.姓名,b.科目,b.成绩 from student a left join score b on a.学号=b.学号 and b.成绩>=60 order by b.科目
      

  2.   

    SELECT a.学号,a.姓名,a.性别,b.科目,b.成绩 
    FROM student a,score b
    WHERE a.学号 = b.学号
    AND a.学号 IN
    (SELECT 学号 FROM score WHERE Math >= 60)
    ORDER BY 
    (SELECT English FROM score WHERE 学号 = a.学号)
      

  3.   

    但是要求是数学及格的学生,按照英语成绩排序啊?最后出来的recordSet如下学号, 姓名,性别 Math, English, Physics
    101   test1  m   60    70       63
    103   test3  m   75    72       88如果还想按照性别,或者姓名排序呢?Thanks in advance.
      

  4.   

    -- 剛才有错。
    SELECT a.学号,a.姓名,a.性别,b.科目,b.成绩 
    FROM student a,score b
    WHERE a.学号 = b.学号
    AND a.学号 IN
    (SELECT 学号 FROM score WHERE 成绩 >= 60 AND 科目 = 'Math')
    ORDER BY 
    (SELECT English FROM score WHERE 学号 = a.学号)
      

  5.   

    SELECT English FROM score WHERE 学号 = a.学号 
    好像不对啊?
      

  6.   

    你最后得到的是这样的:
    学号  姓名  性别 学科    成绩
    101   test1  m   Math    60
    101   test1  m   English 70  
    ...?
    还是这样的:
    学号  姓名  性别 Math  Enghlish Physics
    101   test1  m   60    80       80
    ...?
    如果是第二种,那么使用简单的查询肯定不行,必须使用临时表。
      

  7.   

    如果是第二种,那么对应的OLTP应该是:
    select 学号 into #Temp1 from score where 科目 = 'Math' and 成绩 >= 60
    select #Temp1.学号, student.姓名, student.性别, 0 as Math, 0 as English, 0 as Physics into #Temp2 from #Temp1, 
    student where #Temp1.学号 = student.学号
    update #Temp2 set Math = score.成绩 from score where #Temp2.学号 = score.学号 and score.科目 = 'Math'
    update #Temp2 set English = score.成绩 from score where #Temp2.学号 = score.学号 and score.科目 = 'English'
    update #Temp2 set Physics = score.成绩 from score where #Temp2.学号 = score.学号 and score.科目 = 'Physics'
    select * from #Temp2 order by English
    drop table #temp1
    drop table #temp2
      

  8.   

    To luco (luco):
    要是我的正确,请给我分,我都快穷死了。
      

  9.   

    不是很对阿,如果add科目种类的话,sql语句要一直改啊。我想可能要两次,先找出学号,然后在score里找出他的所有科目成绩。any, give u 10 scores firstly.
      

  10.   

    CREATE TABLE #student(学号 varchar(20),姓名 varchar(20),性别 varchar(20))
    INSERT #student
    SELECT '101','test1','m'
    UNION ALL SELECT '102','test2','f'
    UNION ALL SELECT '103','test3','m'
    GOCREATE TABLE #score(学号 varchar(20),科目 varchar(20),成绩 int)
    INSERT #score 
    SELECT '101','Math',60    
    UNION ALL SELECT '101','English',70  
    UNION ALL SELECT '101','physics',63
    UNION ALL SELECT '102','Math',45
    UNION ALL SELECT '102','English',90
    UNION ALL SELECT '102','physics',76
    UNION ALL SELECT '103','Math',75
    UNION ALL SELECT '103','English',72
    UNION ALL SELECT '103','physics',88
    GODECLARE @sql varchar(8000)
    SET @sql = 'SELECT b.*,a.* FROM ('
    SET @sql = @sql+'SELECT 学号'
    SELECT @sql = @sql+ ',sum(CASE 科目 WHEN '''+科目+''' THEN 成绩 END) ' + 科目 from (SELECT DISTINCT 科目 FROM #score) a
    SET @sql = @sql+' FROM #score '
    SET @sql = @sql+' GROUP BY 学号'
    SET @sql = @sql+') a,#student b WHERE a.学号 = b.学号 AND math >= 60'
    SET @sql = @sql+' ORDER BY English'
    EXEC (@sql)
    GODROP TABLE #student,#score
    GO
      

  11.   

    以上是动态sql语句实现的,可以支持多个科目。
    结果如下:学号   姓名    性别  学号  English   Math  physics     
    -------------------- -------------------- -------------
    101   test1   m    101    70      60     63
    103   test3   m    103    72      75     88
      

  12.   

    To luco(luco):
    我的代码是不是你的意思?
      

  13.   

    -- 类似的问题论坛上有好多,楼主搜索一下动态sql就知道了。再给你帖一个比较好的例子:
    /*
    原表:
    name       km         cj          
    ---------- ---------- ----------- 
    张三         语文         80
    张三         数学         86
    张三         英语         75
    李四         语文         78
    李四         数学         85
    李四         英语         78目标表:
    姓名         数学        英语        语文         总分     
    ---------- ---------- ----------- -----------  -----------         
    李四         85          78          78          241
    张三         86          75          80          241
    */create table #test (name varchar(10),km varchar(10),cj int)
    insert #test select '张三','语文',80
    union all select '张三','数学',86
    union all select '张三','英语',75
    union all select '李四','语文',78
    union all select '李四','数学',85
    union all select '李四','英语',78
    go
    select * from #testselect name 姓名,
    sum(case km when '语文' then cj end) 语文,
    sum(case km when '数学' then cj end) 数学,
    sum(case km when '英语' then cj end) 英语,
    sum(cj) 总分
    from #test group by namedeclare @sql varchar(8000)
    set @sql='select name 姓名'
    select @sql= @sql+ ',sum(case km when '''+km+''' then cj end) ' + km from (select distinct km from #test) a
    set @sql=@sql+',sum(cj) 总分 from #test group by name'
    exec (@sql)
    go
    drop table #test
      

  14.   

    To luco(luco):
    你不能把你的意思一下子说完?!!!!!!!!!!!
    真是笨!!!!!!!!!!
    搞得前面的一帮子兄弟辛辛苦苦搞了半天,其实连意思都不对!!!!!!
      

  15.   

    要找出数学及格的学生, 输出学生的各科成绩和姓名,性别等信息,并且按其中一门学科排序(比如English)。怎样效率不错呢?不清楚吗?
      

  16.   

    to luco(luco) :
       你可以看一下我发的帖子之前几个兄台:poka(poka) ,sharkabc(shark),gmlxf(烛光)的帖子,他们查询语句生成的列(Column,正式文献中叫Attributes,可能说“题头”你最清楚)都不正确,所以根本不可能符合你的要求。是那三个兄台不懂汉语,还是你自己叙述不清?gmlxf(烛光)这个兄台的水平很高,后来写出了很New B的查询语句。所以我认为是你叙述不清,后来我的帖子中也提问了你到底应该是哪种生成结果。
        你的需求没有一下子提完全,是可以肯定的了。我说你起始的需求叙述“不清”,并非错误,否则,我也不可能从中查出端倪。