现有表tab
gender(0:男1:女)
R1(是否月经初潮1:是)
R2(是否首次遗精1:是)
现要查询如下:
--总人数 女生人数 月经初潮人数 男生人数 首次遗精人数另外想请教下,统计7-18岁
年龄 受检人数 女生人数 月经初潮人数 月经发生率 男生人数 首次遗精人数 首次遗精率
7
8
9
.
.
.
18
这样的有什么好的方法,谢谢
gender(0:男1:女)
R1(是否月经初潮1:是)
R2(是否首次遗精1:是)
现要查询如下:
--总人数 女生人数 月经初潮人数 男生人数 首次遗精人数另外想请教下,统计7-18岁
年龄 受检人数 女生人数 月经初潮人数 月经发生率 男生人数 首次遗精人数 首次遗精率
7
8
9
.
.
.
18
这样的有什么好的方法,谢谢
R1(月经初潮1:是0:否)
R2(首次遗精1:是0:否)
age gender R1 R2
1 0 0 0
14 0 0 1
17 1 1 0
9 0 0 0
18 0 0 1
15 1 1 0
insert into tab(age,gender,R1,R2)values(1,0,0,0)
insert into tab(age,gender,R1,R2)values(14,0,0,1)
insert into tab(age,gender,R1,R2)values(17,1,1,0)
insert into tab(age,gender,R1,R2)values(9,0,0,0)
insert into tab(age,gender,R1,R2)values(18,0,0,1)
insert into tab(age,gender,R1,R2)values(15,1,1,0)
select count(1) as 总人数 ,
sum(case when gender=1 then 1 else 0 end) 女生人数 ,
sum(case when R1=1 then 1 else 0 end) 月经初潮人数,
sum(case when gender=0 then 1 else 0 end) 男生人数 ,
sum(case when R2=1 then 1 else 0 end) 首次遗精人数
from tab
-- Author :DBA_Huangzj(發糞塗牆)
-- Date :2013-11-08 10:59:02
-- Version:
-- Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)
-- Dec 28 2012 20:23:12
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go
create table [huang]([age] int,[gender] int,[R1] int,[R2] int)
insert [huang]
select 1,0,0,0 union all
select 14,0,0,1 union all
select 17,1,1,0 union all
select 9,0,0,0 union all
select 18,0,0,1 union all
select 15,1,1,0
--------------开始查询--------------------------select age,(SELECT COUNT(1) FROM huang) ,count(CASE WHEN gender=1 THEN 1 ELSE 0 END ),
count(CASE WHEN gender=1 AND r1=1 THEN 1 ELSE 0 END ),count(CASE WHEN gender=1 AND r1=1 THEN 1 ELSE 0 END )*1.0/count(CASE WHEN gender=1 THEN 1 ELSE 0 END ),
count(CASE WHEN gender=0 THEN 1 ELSE 0 END ),
count(CASE WHEN gender=0 AND r2=1 THEN 1 ELSE 0 END ),count(CASE WHEN gender=0 AND r2=1 THEN 1 ELSE 0 END )*1.0/count(CASE WHEN gender=0 THEN 1 ELSE 0 END )
from [huang]
GROUP BY age
----------------结果----------------------------
/*
age
----------- ----------- ----------- ----------- --------------------------------------- ----------- ----------- ---------------------------------------
1 6 1 1 1.000000000000 1 1 1.000000000000
9 6 1 1 1.000000000000 1 1 1.000000000000
14 6 1 1 1.000000000000 1 1 1.000000000000
15 6 1 1 1.000000000000 1 1 1.000000000000
17 6 1 1 1.000000000000 1 1 1.000000000000
18 6 1 1 1.000000000000 1 1 1.000000000000
*/
年龄 受检人数 女生人数 月经初潮人数 月经发生率 男生人数 首次遗精人数 首次遗精率
== select age as 年龄,count(age) as 受检人数 ,
sum(case when gender=1 then 1 else 0 end) 女生人数 ,
sum(case when R1=1 then 1 else 0 end) 月经初潮人数,
cast(cast (sum(case when R1=1 then 1 else 0 end)*100/((count(age)*1.0)) as float) as nvarchar)+'%' as 月经发生率,
sum(case when gender=0 then 1 else 0 end) 男生人数 ,
sum(case when R2=1 then 1 else 0 end) 首次遗精人数,
cast(cast (sum(case when R2=1 then 1 else 0 end)*100/((count(age)*1.0)) as float) as nvarchar)+'%' as 首次遗精率,
from tab where age>=7 and age<=18 group by ahe
sum(case when gender=1 then 1 else 0 end) 女生人数 ,
sum(case when R1=1 then 1 else 0 end) 月经初潮人数,
cast(cast (sum(case when R1=1 then 1 else 0 end)*100/((count(age)*1.0)) as float) as nvarchar)+'%' as 月经发生率,
sum(case when gender=0 then 1 else 0 end) 男生人数 ,
sum(case when R2=1 then 1 else 0 end) 首次遗精人数,
cast(cast (sum(case when R2=1 then 1 else 0 end)*100/((count(age)*1.0)) as float) as nvarchar)+'%' as 首次遗精率
from tab where age>=7 and age<=18 group by age
where age between 7 and 18
GROUP BY age