我想做一个学生缴费查询,我的缴费表里有ID,学号,姓名,班级,应交费用,已交费用这些列,我想在输入一个班的名字后把这个班的欠费人数统计出来,同时候在DBGIRD里显示出每个欠费学生的信息,在写sql语句的时候遇到一些问题,我的代码如下:
sql.add('select distinct 学号,姓名,sum(应交费用)-sum(已交费用) as 须补交费用 from jfb where 班级号=:bjh groud by 学号');
parameters.ParamByName('bjh').Value:=edit3.Text;
运行的时候说groud 附近有错误,请问该如何改?另外统计欠费人数也没什么概念,请各位指教!我是新学数据库开发的,写出来的东西也不怕大家笑话,只想得到解答,谢谢各位了

解决方案 »

  1.   

    group 不是groud  而且 不必加distinct这个关键字
      

  2.   

    如果每人只有一笔费用的话就不要group by了,直接:
    select 学号,姓名,应交费用-已交费用 as 须补交费用 from   jfb   where   班级号=:bjh不止一笔的话才用sum():
    select  学号,姓名,sum(应交费用)-sum(已交费用)   as   须补交费用   from   jfb   where   班级号=:bjh   group   by   学号,姓名'
    统计欠费人数:(不止一笔要distinct 学号)
    select count(学号) as 人数
    from jgb
    where  班级号=:bjh and 应交费用>已交费用
      

  3.   

    select     学号,姓名,sum(应交费用)-sum(已交费用)       as       须补交费用       from       jfb       where       班级号=:bjh       group       by       学号,姓名' 这样会把全班的都查出来,不欠费的也查出来了,我只想把欠费的查出来那应该怎么样,一人有多笔费用的
      

  4.   

    select 学号,姓名,sum(应交费用)-sum(已交费用) as 须补交费用
    from   jfb
    where   班级号=:bjh   
          and   应交费用> 已交费用 ---加這行
    group   by 学号,姓名
    统计欠费人数:
    select count(distinct 学号)   as   人数 ---用distinct,否則會有重復
    from   jgb 
    where  班级号=:bjh   
        and   应交费用> 已交费用    ----欠費的
      

  5.   

    SELECT A.*, B.已交费用 FROM
    (SELECT DISTINCT 学号,姓名,应交费用 FROM JFB) A,
    (SELECT 学号,SUM(已交费用) AS 已交费用 FROM JFB GROUP BY 学号) B
    WHERE A.学号=B.学号
    AND A.应交费用-B.已交费用>0
      

  6.   

    SELECT A.*, B.已交费用 FROM
    (SELECT DISTINCT 学号,姓名,应交费用 FROM JFB WHERE 班级号=:bjh) A,
    (SELECT 学号,SUM(已交费用) AS 已交费用 FROM JFB WHERE 班级号=:bjh GROUP BY 学号) B
    WHERE A.学号=B.学号
    AND A.应交费用-B.已交费用>0
    parameters.ParamByName('bjh').Value:=edit3.Text;
      

  7.   

    谢谢caffee_cup ,是我搞错了,按照你的方法行了,十分感谢!!