现在两个表,一个是人的基本信息表,一个是一张代码表。代码表:
ID  cpt
1   男
2   女
人员信息中的存储情况:
ID     Name        sex
1      张三         1/2
2      李四         1
3      王五         2
4      马六         1其中的张三就是两个都有,中间隔开了,当然性别中不可能存在,我只是举个例子。
那么我想得到这样的一个分组结果
性别  人数
男    3女    2

解决方案 »

  1.   

    select
          男 = sum(case when sex=1 then 1 else 0 end),
          女 = sum(case when sex=2 then 1 else 0 end)
    from table如果真有哪个 1/2
    select
          男 = sum(case when sex=1 and sex = 1/2 then 1 else 0 end),
          女 = sum(case when sex=2 and sex = 1/2 then 1 else 0 end)
    from table
      

  2.   

    SELECT a.cpt 性别,COUNT(1) 人数
    FROM 代码表 a
    INNER JOIN 人员表 b
    ON a.id=b.sex
    GROUP BY a.cpt
      

  3.   

    select cpt,total=count(*)+(select count(*) from a where sex='1/2') from a,b where sex<>'1/2' and a.sex=b.id group by cpt
      

  4.   

    王忠海
    注册日期: Jul,2006 
    发贴数: 2   参考这样的方法: 
    SELECT '男' XB,COUNT(SEX) COUNTS FROM 人员信息表 WHERE SEX='1' UNION ALL SELECT '女' XB,COUNT(SEX) COUNTS FROM 人员信息表 WHERE SEX='2'
      

  5.   

    --------------------------------------------------------------
    您好,我们是“2006中国杰出数据库工程师评选”活动组委会。
    您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
    http://www.bestdba.cn/match_discussion.aspx在那里,进入本次评选复选的90位数据库工程师将与您展开积极的互动。
    一方面,他们会为您的问题提供满意的答案,
    另一方面,也邀请您为他们投上宝贵的选票。2006-7-8 ~ 2006-7-25日,每天我们将从当天参与"有奖投票"的网友
    中抽取3名幸运者,赠送由IBM提供的精美礼品一份!此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。您的帖子位于:
    http://www.bestdba.cn/match_discussion3.aspx?pointid=274&pointid2=1&agains=1&pointid3=5非常感谢您对本次活动的支持!
    --------------------------------------------------------------
      

  6.   

    fcuandy(边打魔兽边回贴) 说的对
      

  7.   

    ----创建测试数据
    declare @t1 table(id varchar(10),cpt varchar(10))
    declare @t2 table(id int,name varchar(10),sex varchar(10))
    insert @t1
    select '1','男' union all
    select '2','女'
    insert @t2
    select 1,'张三','1/2' union all
    select 2,'李四','1' union all
    select 3,'王五','2' union all
    select 4,'马六','2/1' union all
    select 5,'赵七','1'
    ----汇总计数
    SELECT a.cpt as 性别,b.人数 FROM
    (
    select '1' as id,count(*) as 人数 from @t2 where charindex('1',sex) > 0 
    union all
    select '2' ,count(*) from @t2 where charindex('2',sex) > 0
    ) b LEFT JOIN @t1 a ON b.id = a.id
      

  8.   

    select
          男 = sum(case when sex like'%1%' then 1 else 0 end),
          女 = sum(case when sex like'%2%' then 1 else 0 end)
    from table
      

  9.   

    这个例子举的不太恰当。可以举个答题情况的例子,统计分别选择A、B、C、D的人数。