已经表的信息如下  日期       状态                      
1          未到诊    
1          初诊      
2          复诊      
5          初诊      
2          复诊      
..
...
....我想在界面的datagridivew中显示如下信息日期   记录总数     到诊数量(初诊+复诊)      到诊率(初诊数量/记录总数)         
1        10            2                          20%
2        10            4                          40%
3        20            5                          25%
..
...
....
 注:若是单独球记录总数 和 到诊数量 我是会的 ,如下->
1.记录总数: select count(ID) from 表  group by 日期 order by 日期 desc
2.到诊总数: select count(ID) from 表 where 状态=“初诊” or 状态="复诊"  group by 日期  order by 日期 desc
但是两个sql整合到一起(别忘了还有个诊率),最后出现到上面那个gridview那样,我就不太会弄了
PS:如果到诊率不用sql直接取出,请写出C#代码,谢谢了!!!!!!

解决方案 »

  1.   

    select 
      日期,
      count(id) as 记录总数,
      sum(case 状态='初诊' or 状态='复诊' then 1 else  0 end) as 到诊总数,
      ltrim(cast(sum(case 状态='初诊' or 状态='复诊' then 1 else  0 end)*100.0/count(id) as dec(18,2)))+'%' as 到诊率
    from
      tb
    group by
      日期
      

  2.   

    select 
      日期,
      count(日期) as 记录总数,
      sum(case 状态='初诊' or 状态='复诊' then 1 else  0 end) as 到诊数量(初诊+复诊),
      cast(sum(case 状态='初诊' or 状态='复诊' then 1 else  0 end)*100.0/count(日期) as varchar(20))+'%' as 到诊率(初诊数量/记录总数)
    from
      tb
    group by
      日期
      

  3.   


    declare @t table 
    (
    日期 int,
    状态 varchar(6)
    )
    insert into @t
    select 1,'未到诊' union all
    select 1,'初诊' union all
    select 1,'复诊' union all
    select 1,'未到诊' union all
    select 1,'未到诊' union all
    select 1,'未到诊' union all
    select 1,'未到诊' union all
    select 1,'未到诊' union all
    select 1,'未到诊' union all
    select 1,'未到诊' union all
    select 2,'复诊' union all
    select 5,'初诊' union all
    select 2,'复诊' union all
    select 5,'未到诊'select 
    日期,count(1) as 记录总数,
    到诊数量=sum(case when 状态='复诊' or 状态='初诊' then 1 else 0 end),
    到诊率=ltrim(sum(case when 状态='复诊' or 状态='初诊' then 1 else 0 end)*100/count(1))+'%'
    from @t group by 日期
    /*
    日期          记录总数        到诊数量        到诊率
    ----------- ----------- ----------- -------------
    1           10          2           20%
    2           2           2           100%
    5           2           1           50%
    */
      

  4.   

    declare @tb table 
    (
        日期 int,
        状态 varchar(6)
    )
    insert into @tb
    select 1,'未到诊' union all
    select 1,'初诊' union all
    select 1,'复诊' union all
    select 1,'未到诊' union all
    select 1,'未到诊' union all
    select 1,'未到诊' union all
    select 1,'未到诊' union all
    select 1,'未到诊' union all
    select 1,'未到诊' union all
    select 1,'未到诊' union all
    select 2,'复诊' union all
    select 5,'初诊' union all
    select 2,'复诊' union all
    select 5,'未到诊'select 日期,COUNT(日期) as 记录总数, sum(case when 状态='复诊' or 状态='初诊' then 1 else 0 end) as 到诊数量,
        ltrim(sum(case when 状态='复诊' or 状态='初诊' then 1 else 0 end)*100/count(1))+'%' as 到诊率
    from @tb group by 日期
     
    (14 行受影响)
    日期          记录总数        到诊数量        到诊率
    ----------- ----------- ----------- -------------
    1           10          2           20%
    2           2           2           100%
    5           2           1           50%(3 行受影响)