请教这个问题:表:员工编号、姓名、性别、学历、员工类型、出生日期 等等 现在要作成这样的报表: 项目      数量     比例(%)
 男       40       40
 女       60       60SELECT  性别,count(性别),(SELECT COUNT(*)
         FROM ygda
         WHERE a.性别 = 性别)/(select count(*) from ygda)
FROM ygda a
GROUP BY 性别为什么查询出来的  比例 是 0 呢?我问过好多人,他们都说语句是正常,没什么毛病,但我还是觉得有问题,请你们帮我查查啦,谢谢

解决方案 »

  1.   

    SELECT 性别,(SELECT COUNT(*) FROM ygda
             WHERE a.性别 = 性别),(SELECT COUNT(*)
             FROM ygda
             WHERE a.性别 = 性别)/(select count(性别) from ygda)
    FROM ygda a
    GROUP BY 性别上面的语句改成这样,比例还是为0,郁闷呀
      

  2.   

    是有问题的,cuteant哥,你试的时候要用数据试才能看出来的。help me!
      

  3.   

    你是用
    SELECT 性别,(SELECT COUNT(*) FROM ygda
             WHERE a.性别 = 性别),(SELECT COUNT(*)
             FROM ygda
             WHERE a.性别 = 性别)/(select count(性别) from ygda)
    FROM ygda a
    GROUP BY 性别
    这个查询语句吗?cuteant哥,我确实是试过N次了,但都比例查出来还是0的,为什么?帮我解吸一下,好吗?
      

  4.   

    我新建了一个表,名为main,增加了3个字段,一个id,一个name,一个xb
    增加了10条记录,name分别为1到10,id是自动编号的,为1到10,xb交替为男、女然后用了下面的select语句,没有发现问题
    SQL.Text('SELECT xb,(SELECT COUNT(*) FROM main WHERE a.xb = xb),(SELECT COUNT(*) FROM main WHERE a.xb = xb)/(select count(xb) from main) FROM main a GROUP BY xb');
      

  5.   

    cuteant哥,你那个表测试可能真的没问题,但我用我这个表确实有问题,我的QQ:123033319,不知能否跟你交流一下,这个问题简单又难呀,在线等
      

  6.   

    不知道,我的  编号、名字、性别 都是 char 类型的,难道跟这个有关?
      

  7.   

    sorry, I am not useing the QQ now...
      

  8.   

    前面的数量是对的,不过呢,
    SELECT 性别,(SELECT COUNT(*) FROM ygda
             WHERE a.性别 = 性别),(SELECT COUNT(*)
             FROM ygda
             WHERE a.性别 = 性别)*1.0/(select count(性别) from ygda)
    FROM ygda a
    GROUP BY 性别
    上述语句上  我加上了   *1.0  比例就出来的,不过它的小数点有好多位,如果我想只显示4位小数点的话,又如何解决呢?
      

  9.   

    然后我改成
    SELECT 性别,
              (SELECT COUNT(*)
             FROM ygda
             WHERE a.性别 = 性别) AS Expr1, CONVERT(varchar(4),
              (SELECT COUNT(*)
             FROM ygda
             WHERE a.性别 = 性别) * 1.0 /
              (SELECT COUNT(性别)
             FROM ygda) * 100) AS Expr2
    FROM ygda a
    GROUP BY 性别
    它就提示   numeric 转换  varchar 发生算术益出,请教,如何改才是正确的?谢谢啦,
      

  10.   

    不知是Round() 还是 RoundTo() 可以取两位小数。。
      

  11.   

    SELECT  性别,count(性别),cast(Round(cast(count(性别) as numeric(8,2))
    /(select count(*) from ygda)*100,2) as numeric(8,2))
    FROM ygda a
    GROUP BY 性别as numeric(8,2))