select depcode,personna,typedes,
       sum(case when rday='01' then rs else 0 end) as [01],
       sum(case when rday='02' then rs else 0 end) as [02],
       sum(case when rday='03' then rs else 0 end) as [03],
       ......
       sum(case when rday='31' then rs else 0 end) as [31]
from doctorghview
where ryear=@year and rmonth=@month
group by depcode,personna,typedes另,表结构不合理,太冗余。

解决方案 »

  1.   

    create proc p_qry
    @year int, --查询的年份
    @month int --查询的月份
    as
    select depcode,personna,typedes
    ,[01]=sum(case rday when '01' then rs else 0 end)
    ,[02]=sum(case rday when '02' then rs else 0 end)
    ,[03]=sum(case rday when '03' then rs else 0 end)
    ,[04]=sum(case rday when '04' then rs else 0 end)
    ,[05]=sum(case rday when '05' then rs else 0 end)
    ,[06]=sum(case rday when '06' then rs else 0 end)
    ,[07]=sum(case rday when '07' then rs else 0 end)
    ,[08]=sum(case rday when '08' then rs else 0 end)
    ,[09]=sum(case rday when '09' then rs else 0 end)
    ,[10]=sum(case rday when '10' then rs else 0 end)
    ,[11]=sum(case rday when '11' then rs else 0 end)
    ,[12]=sum(case rday when '12' then rs else 0 end)
    ,[13]=sum(case rday when '13' then rs else 0 end)
    ,[14]=sum(case rday when '14' then rs else 0 end)
    ,[15]=sum(case rday when '15' then rs else 0 end)
    ,[16]=sum(case rday when '16' then rs else 0 end)
    ,[17]=sum(case rday when '17' then rs else 0 end)
    ,[18]=sum(case rday when '18' then rs else 0 end)
    ,[19]=sum(case rday when '19' then rs else 0 end)
    ,[20]=sum(case rday when '20' then rs else 0 end)
    ,[21]=sum(case rday when '21' then rs else 0 end)
    ,[22]=sum(case rday when '22' then rs else 0 end)
    ,[23]=sum(case rday when '23' then rs else 0 end)
    ,[24]=sum(case rday when '24' then rs else 0 end)
    ,[25]=sum(case rday when '25' then rs else 0 end)
    ,[26]=sum(case rday when '26' then rs else 0 end)
    ,[27]=sum(case rday when '27' then rs else 0 end)
    ,[28]=sum(case rday when '28' then rs else 0 end)
    ,[29]=sum(case rday when '29' then rs else 0 end)
    ,[30]=sum(case rday when '30' then rs else 0 end)
    ,[31]=sum(case rday when '31' then rs else 0 end)
    from doctorghview
    where ryear=@year and rmonth=@month
    group by depcode,personna,typedes
      

  2.   

    ryear,rmonth,rday是从regidate中分离出来的,原表中没有这三个字段,只有流水号和收费日期,挂号类型,医师姓名,挂号科室.
      

  3.   

    --那就这样写存储过程
    create proc p_qry
    @year int, --查询的年份
    @month int --查询的月份
    as
    set nocount on
    declare @dt1 datetime,@dt2 datetime,@s nvarchar(4000),@i int
    select @dt1=dateadd(year,@year-1900,dateadd(month,@month-1,'1900-1-1'))
    ,@dt2=dateadd(month,1,@dt1)-1
    ,@i=day(@dt2)
    ,@s=''
    while @i>0
    select @s=',['+right(100+@i,2)+']=sum(case day(regidate) when '
    +cast(@i as varchar)+' then rs else 0 end)'+@s
    ,@i=@i-1
    set @s='select depcode,personna,typedes'+@s+'
    from doctorghview
    where regidate between @dt1 and @dt2
    group by depcode,personna,typedes'
    exec sp_executesql @s
    ,N'@dt1 datetime,@dt2 datetime'
    ,@dt1,@dt2
    go--调用实现查询
    exec p_qry 2004,12
      

  4.   

    可以先建一个view来解决此问题
    create view dbo.view_doctorghview as
    select depcode,personna,typedes,substring(regidate,1,4) as ryear,
           substring(regidate,6,2) as rmonth,substring(regidate,9,2) 
    from  doctorghview然后再执行 victorycyz(中海),zjcxc(邹建) 的程序!
    也可以把视图得工作加到victorycyz(中海),zjcxc(邹建)程序中也可以实现create proc p_qry
    @year int, --查询的年份
    @month int --查询的月份
    as
    select depcode,personna,typedes
    ,[01]=sum(case substring(regidate,9,2) when '01' then rs else 0 end)
    ,[02]=sum(case substring(regidate,9,2) when '02' then rs else 0 end)
    ,[03]=sum(case substring(regidate,9,2) when '03' then rs else 0 end)
    ,[04]=sum(case substring(regidate,9,2) when '04' then rs else 0 end)
    ,[05]=sum(case substring(regidate,9,2) when '05' then rs else 0 end)
    ,[06]=sum(case substring(regidate,9,2) when '06' then rs else 0 end)
    ,[07]=sum(case substring(regidate,9,2) when '07' then rs else 0 end)
    ,[08]=sum(case substring(regidate,9,2) when '08' then rs else 0 end)
    ,[09]=sum(case substring(regidate,9,2) when '09' then rs else 0 end)
    ,[10]=sum(case substring(regidate,9,2) when '10' then rs else 0 end)
    ,[11]=sum(case substring(regidate,9,2) when '11' then rs else 0 end)
    ,[12]=sum(case substring(regidate,9,2) when '12' then rs else 0 end)
    ,[13]=sum(case substring(regidate,9,2) when '13' then rs else 0 end)
    ,[14]=sum(case substring(regidate,9,2) when '14' then rs else 0 end)
    ,[15]=sum(case substring(regidate,9,2) when '15' then rs else 0 end)
    ,[16]=sum(case substring(regidate,9,2) when '16' then rs else 0 end)
    ,[17]=sum(case substring(regidate,9,2) when '17' then rs else 0 end)
    ,[18]=sum(case substring(regidate,9,2) when '18' then rs else 0 end)
    ,[19]=sum(case substring(regidate,9,2) when '19' then rs else 0 end)
    ,[20]=sum(case substring(regidate,9,2) when '20' then rs else 0 end)
    ,[21]=sum(case substring(regidate,9,2) when '21' then rs else 0 end)
    ,[22]=sum(case substring(regidate,9,2) when '22' then rs else 0 end)
    ,[23]=sum(case substring(regidate,9,2) when '23' then rs else 0 end)
    ,[24]=sum(case substring(regidate,9,2) when '24' then rs else 0 end)
    ,[25]=sum(case substring(regidate,9,2) when '25' then rs else 0 end)
    ,[26]=sum(case substring(regidate,9,2) when '26' then rs else 0 end)
    ,[27]=sum(case substring(regidate,9,2) when '27' then rs else 0 end)
    ,[28]=sum(case substring(regidate,9,2) when '28' then rs else 0 end)
    ,[29]=sum(case substring(regidate,9,2) when '29' then rs else 0 end)
    ,[30]=sum(case substring(regidate,9,2) when '30' then rs else 0 end)
    ,[31]=sum(case substring(regidate,9,2) when '31' then rs else 0 end)
    from doctorghview
    where substring(regidate,1,4)=@year and substring(regidate,6,2)=@month
    group by depcode,personna,typedes
      

  5.   

    谢谢以上高手,特别是zjcxc(邹建)太牛了,结帐.