我要统计数据表1里的一个字段如下:
字段名:隶属部门
记录: 业务部
    资源部
    人事部
    管理部
而且字段名:隶属部门里的记录是随时增加的要统计出每个部门里的人数,
然后把结果显示在数据表2里,要求分别统计出每个部门里的男女人数,最后还要合计数。
数据表2结构为:
字段名:项目 男 女 合计
备注:我用的是dbisam数据库,select语句的语法如下:
SELECT [DISTINCT | ALL] * | column
[AS correlation_name | correlation_name], [column...]
[INTO [MEMORY] destination_table]
FROM [MEMORY] table_reference [AS correlation_name | correlation_name]
[[[[INNER | [LEFT | RIGHT] OUTER JOIN] [MEMORY] table_reference
[AS correlation_name | correlation_name] ON join_condition]
[WHERE predicates]
[GROUP BY group_list]
[HAVING predicates]
[ORDER BY order_list [NOCASE]]
[TOP number_of_rows]
[WITH LOCKS]
[LANGUAGE language_string SORT sort_string]
[ENCRYPTED WITH password]
[NOJOINOPTIMIZE]
[UNION [ALL] [SELECT...]]

解决方案 »

  1.   

    select Department
    ,sum(case when Gender="M" then 1 else null end) as Male
    ,sum(case when Gender="F" then 1 else null end) as Female
    ,count( * ) as SubTotal
    from Table1
    group by Department
      

  2.   

    TO: xx9yk(大琨) 我用的数据好象不支持when这个语句,会出错,
    你可以看看上面的dbisam数据库,select语句的语法。
      

  3.   

    拷,还是这个问题啊,你的MSN呢,MSN上讲。
      

  4.   

    首先,应先贴出你的表结构,我想你的表结构最少有如下字段:
    隶属部门,姓名,性别

    业务部   张三   男
    人事部   李四   男
    资源部   王五   男
    管理部   李丽   女
    管理部   赵六   男
    。然后你要得到如下结果:
    部门, 男,女,总数
    管理部 1   1    2
    人事部 1   0    1
    业务部 1   0    1
    资源部 1   0    1

    先来建立测试表、并加入上述数据
    create table table1(隶属部门 char(10), 姓名 char(10), 性别 char(2))
    insert into table1 values('业务部','张三','男')
    insert into table1 values('人事部','李四','男')
    insert into table1 values('资源部','王五','男')
    insert into table1 values('管理部','李丽','女')
    insert into table1 values('管理部','赵六','男')在SQL里有一种比较简洁的写法,但是你的数据库不支持,就不用再提了,
    来看一看子查询的方法:把你的需求分为四步
    1、 将表中存在人员按部门汇总,;
    select distinct 隶属部门,count(*) as 总数 from table1 group by 隶属部门
    //把这个结果集体当作表A
    2、 将表中男性人员按部门汇总
    select 隶属部门,count(*) as 男 from table1 where 性别='男' group by 隶属部门
    //把这个结果集体当作表B
    3、 将表中女性人员按部门汇总
    select 隶属部门,count(*)  as 女 from table1 where 性别='女' group by 隶属部门
    //把这个结果集体当作表C
    然后B、C分别与A关联,可的出你想要的结果如下:
    select A. 隶属部门,B.男,C.女,A. 总数
      from
    (select distinct 隶属部门,count(*) as 总数 from table1 group by 隶属部门) A
    left join
    (select 隶属部门,count(*) as 男 from table1 where 性别='男' group by 隶属部门) B
      on A.隶属部门=B.隶属部门
    left join
    (select 隶属部门,count(*)  as 女 from table1 where 性别='女' group by 隶属部门) C
      on A.隶属部门=C.隶属部门为避免关联后出现NULL,可使用isnull函数select A. 隶属部门,isnull(B.男,0) as 男 ,isnull(C.女,0) as 女,A. 总数
      from
    (select distinct 隶属部门,count(*) as 总数 from table1 group by 隶属部门) A
    left join
    (select 隶属部门,count(*) as 男 from table1 where 性别='男' group by 隶属部门) B
      on A.隶属部门=B.隶属部门
    left join
    (select 隶属部门,count(*)  as 女 from table1 where 性别='女' group by 隶属部门) C
      on A.隶属部门=C.隶属部门如上,可得到你想要的结果。
    隶属部门, 男,女,总数
    管理部      1   1    2
    人事部      1   0    1
    业务部      1   0    1
    资源部      1   0    1
    如果你的数据库连上述子查询都不能支持,那就按上述思路写成存储过程吧。
      

  5.   

    TO:wdsimon(老王)语句单独执行没问题,如果语句连在一起执行的话就会出错,
    提示信息如下:
    DBISAM Engine Error # 11949 SQL error - End of Select Statement expected,instead found '隶属部门'
      

  6.   

    下了一个dbisam数据库试了一下,好像是不支持子查询,并且没有存储过程
    但看了一些说明,是支持标准SQL查询的
      
    DBISAM 3.07 1.2M  
    优秀的文件型数据库引擎,拥用自己特有的文件格式和接口,编译后的程序可以独立运行,不需要BDE、ODBC或者是ADO的支持,其引擎(约200KB-300KB)已包含在编译后的EXE文件中,支持标准的SQL查询,支持多用户并发访问,支持事务处理,支持文件加密,特别适合制作小型的数据库管理程序。另外,DBISAM还自带了实用程序,可以方便地建立、修改、加密数据库以及将多种格式的数据库转换为自己的数据库格式。DBISAM数据库创建设计转换管理工具下载Additional Software and Utilities
     
    你到SQL版去问一下,看有没有人用过
      

  7.   

    这是我自己写的语句,应该怎么改才能行出正确统计结果呀。
    SQL.Add('select '+i+',count((性别="男")) as 男,count((性别="女")) as 女,count(*) as 合计 into 数据表2 from 数据表1 group by '+i+'');
    结果如下:
    数据表1里的内容         数据表2里的内容
    姓名 性别 隶属部门             隶属部门  男 女 合计
    张三 男   业务部       业务部  1 1  1
    李四 女   管理部              管理部    1  1    1
    正确的统计结果应该是这样才对呀,如下:
    数据表1里的内容         数据表2里的内容
    姓名 性别 隶属部门             隶属部门  男 女 合计
    张三 男   业务部       业务部  1 0  1
    李四 女   管理部              管理部    0  1    1
      

  8.   

    有问题: 首先i放进去,会报错 ;还有count函数里面必须是计算字段,不能带有别名
      

  9.   

    TO: kevin218(张智勇) 应该是这样才对,那count应该怎么改呢?
    这是我自己写的语句,应该怎么改才能行出正确统计结果呀。
    SQL.Add('select 隶属部门,count((性别="男")) as 男,count((性别="女")) as 女,count(*) as 合计 into 数据表2 from 数据表1 group by 隶属部门');
    结果如下:
    数据表1里的内容         数据表2里的内容
    姓名 性别 隶属部门             隶属部门  男 女 合计
    张三 男   业务部       业务部  1 1  1
    李四 女   管理部              管理部    1  1    1
    正确的统计结果应该是这样才对呀,如下:
    数据表1里的内容         数据表2里的内容
    姓名 性别 隶属部门             隶属部门  男 女 合计
    张三 男   业务部       业务部  1 0  1
    李四 女   管理部              管理部    0  1    1
      

  10.   

    dbisam数据库,支不支持
    iff(...)或case....
    貼上有關判斷的syntax來看看吧
      

  11.   

    TO:xx9yk(大琨)  不支持呀!