现在两个表,一个是人的基本信息表,一个是一张代码表。代码表:
ID cpt
1 男
2 女
人员信息中的存储情况:
ID Name sex
1 张三 1/2
2 李四 1
3 王五 2
4 马六 1其中的张三就是两个都有,中间隔开了,当然性别中不可能存在,我只是举个例子。
那么我想得到这样的一个分组结果
性别 人数
男 3女 2
ID cpt
1 男
2 女
人员信息中的存储情况:
ID Name sex
1 张三 1/2
2 李四 1
3 王五 2
4 马六 1其中的张三就是两个都有,中间隔开了,当然性别中不可能存在,我只是举个例子。
那么我想得到这样的一个分组结果
性别 人数
男 3女 2
男 = 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
FROM 代码表 a
INNER JOIN 人员表 b
ON a.id=b.sex
GROUP BY a.cpt
注册日期: Jul,2006
发贴数: 2 参考这样的方法:
SELECT '男' XB,COUNT(SEX) COUNTS FROM 人员信息表 WHERE SEX='1' UNION ALL SELECT '女' XB,COUNT(SEX) COUNTS FROM 人员信息表 WHERE SEX='2'
您好,我们是“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非常感谢您对本次活动的支持!
--------------------------------------------------------------
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
男 = sum(case when sex like'%1%' then 1 else 0 end),
女 = sum(case when sex like'%2%' then 1 else 0 end)
from table