表如下
姓名 课程 分数
张三 语文 88
张三 数学 78
张三 英语 54
张三 化学 66
李四 语文 49
李四 数学 57
李四 英语 62
李四 化学 70我想得到的结果是姓名 课程 分数
李四 语文 49
李四 数学 57即 列出1门以上不及格的人的不及格信息SELECT 姓名,课程,分数
FROM 成绩单
WHERE (分数 < 60)
GROUP BY 姓名
HAVING (COUNT(*) > 1)这是我写的,但是每次运行都显示列 成绩单.课程在选择列表中无效,因为该列既不包含在聚合函数中也不在group by 子句中谢谢大家帮忙

解决方案 »

  1.   

    SELECT 姓名,课程,MAX(分数) AS 分数
    FROM 成绩单
    WHERE (分数 < 60)
    GROUP BY 姓名,课程
    HAVING (COUNT(*) > 1) 
      

  2.   

    IF OBJECT_ID('[成绩单]') IS NOT NULL DROP TABLE [成绩单] 
     GO 
    CREATE TABLE [成绩单]([姓名] VARCHAR(10),[课程] VARCHAR(10),[分数] INT)
    INSERT [成绩单] SELECT '张三','语文',88
    UNION ALL SELECT '张三','数学',78
    UNION ALL SELECT '张三','英语',54
    UNION ALL SELECT '张三','化学',66
    UNION ALL SELECT '李四','语文',49
    UNION ALL SELECT '李四','数学',57
    UNION ALL SELECT '李四','英语',62
    UNION ALL SELECT '李四','化学',70SELECT 姓名,课程,分数 
    FROM 成绩单 T
    WHERE 分数 < 60
      AND EXISTS(SELECT 1 
                 FROM 成绩单 
                 WHERE 分数 < 60 
                   AND 姓名=T.姓名 
                   AND 分数<>T.分数)/*
    姓名         课程         分数
    ---------- ---------- -----------
    李四         语文         49
    李四         数学         57(2 行受影响)
    */
      

  3.   

    谢谢你们,不过1楼的还是错的,而且我看不懂为什么你要用max
      

  4.   


     select * from tb
     where 成绩<60 and
      姓名 in(select 姓名 from tb where 成绩<60 group by 姓名 having count(*)>1) 
      

  5.   

    2楼的大哥可以帮我写上注释看吗,那个select 1 我看不懂什么意思,其他明白了SELECT 姓名,课程,分数 
    FROM 成绩单 T
    WHERE 分数 < 60
      AND EXISTS(SELECT 1 
                 FROM 成绩单 
                 WHERE 分数 < 60 
                   AND 姓名=T.姓名 
                   AND 分数<>T.分数)
      

  6.   


    SELECT 1 相当于 SELECT * ,没有特别的意思,主要是跟据后面的条件为TRUE返回结果集。
      

  7.   

    CREATE TABLE [成绩单]([姓名] VARCHAR(10),[课程] VARCHAR(10),[分数] INT)
    INSERT [成绩单] SELECT '张三','语文',88
    UNION ALL SELECT '张三','数学',78
    UNION ALL SELECT '张三','英语',54
    UNION ALL SELECT '张三','化学',66
    UNION ALL SELECT '李四','语文',49
    UNION ALL SELECT '李四','数学',57
    UNION ALL SELECT '李四','英语',62
    UNION ALL SELECT '李四','化学',70SELECT T.* FROM 成绩单 T,
    (SELECT 姓名 FROM 成绩单 WHERE 分数<60 GROUP BY 姓名 HAVING COUNT(1)>1) T1 
    WHERE T.姓名=T1.姓名 AND 分数<60
    姓名         课程         分数          
    ---------- ---------- ----------- 
    李四         语文         49
    李四         数学         57(所影响的行数为 2 行)