现在有一张表
学号   成绩  课程名
1001   85    语文
1001   90    数学
1002   70    语文
1002   100   外语
1003   95    语文
1003   80    数学
1004   95    语文
1004   80    数学
现在要查询出语文成绩比数学成绩高的学生的学号
我是新手,一点思路有没有,路过的高手给下sql语句怎么写啊,谢谢了!~~~~~

解决方案 »

  1.   

    select 学号 from TB group by 学号 
    having SUM(case when 课程名 = '语文' then 成绩 else 0 end) > SUM(case when 课程名 = '数学' then 成绩 else 0 end) 
      

  2.   

    ---测试数据---
    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([学号] int,[成绩] int,[课程名] varchar(4))
    insert [tb]
    select 1001,85,'语文' union all
    select 1001,90,'数学' union all
    select 1002,70,'语文' union all
    select 1002,100,'外语' union all
    select 1003,95,'语文' union all
    select 1003,80,'数学' union all
    select 1004,95,'语文' union all
    select 1004,80,'数学'
     
    ---查询---
    select distinct a.学号
    from tb a,tb b
    where a.学号=b.学号
    and a.课程名='数学' and b.课程名='语文'
    and a.成绩<b.成绩---结果---
    学号
    -----------
    1003
    1004(2 行受影响)
      

  3.   

    --> 测试数据:Stu
    if object_id('Stu') is not null
    drop table Stu---->建表
    create table Stu([学号] int,[成绩] int,[课程名] varchar(4))
    insert Stu
    select 1001,85,'语文' union all
    select 1001,90,'数学' union all
    select 1002,70,'语文' union all
    select 1002,100,'外语' union all
    select 1003,95,'语文' union all
    select 1003,80,'数学' union all
    select 1004,95,'语文' union all
    select 1004,80,'数学'--> 查询结果
    SELECT a.*,b.课程名,b.成绩 FROM Stu a,Stu b
    where a.学号 = b.学号  and a.成绩>b.成绩
    and a.课程名='语文'
    --> 删除表格
    --DROP TABLE Stu
      

  4.   

    --> 测试数据:#
    if object_id('tempdb.dbo.#') is not null drop table #
    create table #(学号 int, 成绩 int, 课程名 varchar(8))
    insert into #
    select 1001, 85, '语文' union all
    select 1001, 90, '数学' union all
    select 1002, 70, '语文' union all
    select 1002, 100, '外语' union all
    select 1003, 95, '语文' union all
    select 1003, 80, '数学' union all
    select 1004, 95, '语文' union all
    select 1004, 80, '数学'select * from # as t where 课程名 = '语文' and not exists (select 1 from # where 学号=t.学号 and 课程名='数学' and 成绩>t.成绩)/*
    学号        成绩        课程名
    ----------- ----------- --------
    1002        70          语文
    1003        95          语文
    1004        95          语文
    */
      

  5.   

    ;WITH TB AS(
    SELECT 1001 学号,85 成绩,'语文' 课程名
    UNION ALL SELECT 1001,90,'数学'
    UNION ALL SELECT 1002,70,'语文'
    UNION ALL SELECT 1002,100,' 外语'
    UNION ALL SELECT 1003,95,'语文'
    UNION ALL SELECT 1003,80,'数学'
    UNION ALL SELECT 1004,95,'语文'
    UNION ALL SELECT 1004,80,'数学')select 学号,SUM(case when 课程名 = '语文' then 成绩 else 0 end) [语文成绩] 
        , SUM(case when 课程名 = '数学' then 成绩 else 0 end) [数学成绩] 
    from TB group by 学号 
    having SUM(case when 课程名 = '语文' then 成绩 else 0 end) > SUM(case when 课程名 = '数学' then 成绩 else 0 end) /*
    学号 语文成绩 数学成绩
    1002 70         0
    1003 95         80
    1004 95         80
    */
      

  6.   

    Select A.学号 From Tb A,Tb B Where A.课程名 = '语文' And B.课程名 = '数学' And A.成绩 > B.成绩 And A.学号 = B.学号
      

  7.   

    这表本身所有科目放在一起 所以不能直接比较 我把这表分成语文和数学
    selet a.学号 from 表 a,表 b
    where a.学号=b.学号 and a.科目='语文' and b.科目='数学' and a.分数>b.分数