SQL统计查询解决办法
SQL统计查询
现在有三张表,希望按照年龄段统计出疾病检出人数
RYDJB存放人员基本信息(姓名、年龄、性别、档案号[主键])
JGB存放结果的表
CJZDB存放诊断数据表
期待的统计结果:
遇到问题:一个sGRDAH即一个人的唯一ID,一个人的疾病 不重复统计。
如上图中的张三 统计疾病时有:001;002;003;004;006;007;008;009重复不计
之后还要按照人员性别、以及所在年龄段进行统计,恳请各位大神们,多多指点。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
如果查询结果要像你图那样的,建议用存储过程来实现了,分别处理后放到一张固定表里
------解决方案--------------------
现在有三张表,希望按照年龄段统计出疾病检出人数
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