现有表tab
gender(0:男1:女)
R1(是否月经初潮1:是)
R2(是否首次遗精1:是)
现要查询如下:
--总人数 女生人数 月经初潮人数  男生人数 首次遗精人数另外想请教下,统计7-18岁
年龄 受检人数 女生人数 月经初潮人数 月经发生率 男生人数 首次遗精人数 首次遗精率
7
8
9
.
.
.
18
这样的有什么好的方法,谢谢

解决方案 »

  1.   


    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)
      

  2.   


    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
      

  3.   

    列名你自己补充吧----------------------------------------------------------------
    -- 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
    */
      

  4.   

    另外想请教下,统计7-18岁
    年龄 受检人数 女生人数 月经初潮人数 月经发生率 男生人数 首次遗精人数 首次遗精率
    == 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
      

  5.   

    sorry,上面有点符号及字段错误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 age
      

  6.   

    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]
    where age between 7 and 18
     GROUP BY age