日期:2014-05-17  浏览次数:20713 次

SQL统计查询
现在有三张表,希望按照年龄段统计出疾病检出人数
RYDJB存放人员基本信息(姓名、年龄、性别、档案号[主键])                   


JGB存放结果的表

CJZDB存放诊断数据表

期待的统计结果:


遇到问题:一个sGRDAH即一个人的唯一ID,一个人的疾病 不重复统计。
如上图中的张三 统计疾病时有:001;002;003;004;006;007;008;009重复不计
之后还要按照人员性别、以及所在年龄段进行统计,恳请各位大神们,多多指点。
SQL 统计 疾病统计 体检 数据

------解决方案--------------------

--各疾病的检出总人数可以这样来统计
select t1.sMC as 疾病名称,count(distinct sGRDAH) as 检出总人数
from jgb t1,CJZDB t2,RYDJB t3
where CHARINDEX(t2.sBM,t1.sZDMC)>0 and t3.sGRDAH=t1.sGRDAH
group by t1.sBM,t1.sMC

------解决方案--------------------

--年龄分布的就好办了

--<45岁的
select t1.sMC as 疾病名称,count(distinct sGRDAH) as 检出总人数
from jgb t1,CJZDB t2,RYDJB t3
where CHARINDEX(t2.sBM,t1.sZDMC)>0 and t3.sGRDAH=t1.sGRDAH
and t3.iNL<=45
group by t1.sBM,t1.sMC

--剩下的依次类推

------解决方案--------------------
如果查询结果要像你图那样的,建议用存储过程来实现了,分别处理后放到一张固定表里
------解决方案--------------------
CREATE TABLE #RYDJB(ID INT IDENTITY,姓名 NVARCHAR(10), 性别 NCHAR(1), 年龄 INT, sGRDAH VARCHAR(20))
INSERT #RYDJB (姓名, 性别, 年龄, sGRDAH )
SELECT '张三', '女', 23, '20130600434' UNION ALL
SELECT '李四', '男', 23, '20130600435' UNION ALL