说明:表一《处方》      包含字段:药品名称 药品金额 结算收据号
      表二《处方明细》  包含字段:开药医生 医生代码 药品名称
      表三《药房》      包含字段:发药日期 医生代码 结算收据号请统计每个医生一个月所开金额最大的五种药品

解决方案 »

  1.   

    ;with f as
    (
    select
     a.药品金额,b.药品名称 ,c.发药日期
    from
     表1 a,表2 b,表3 c
    where
     a.药品名称=b.药品名称 and b.医生代码=c.医生代码 and a.结算收据号=c.结算收据号
    )
    SELECT
     * 
    FROM 
     f AS T 
    WHERE 
     ID IN(SELECT TOP 2 ID FROM f WHERE month(发药日期)=T.(发药日期) ORDER BY 药品金额 DESC)
      

  2.   

    ;with f as
    (
    select
     a.药品金额,b.药品名称 ,c.发药日期
    from
     表1 a,表2 b,表3 c
    where
     a.药品名称=b.药品名称 and b.医生代码=c.医生代码 and a.结算收据号=c.结算收据号
    )
    SELECT
     * 
    FROM 
     f AS T 
    WHERE 
     ID IN(SELECT TOP 2 ID FROM f WHERE month(发药日期)=month(T.发药日期) ORDER BY 药品金额 DESC)
      

  3.   

    select t2.医生代码,t2.开药医生,t1.药品名称,sum(t1.药品金额) as 药品金额
    from into #tmp [处方] t1,[处方明细] t2,[药房] t3
    where t1.药品名称=t2.药品名称 and t1.结算收据号=t3.结算收据号
         and t2.医生代码=t3.医生代码 and t3.发药日期 between 月开始 and 月结束
    group by t2.医生代码,t2.开药医生,t1.药品名称    --统计每个医生一月的药品金额,名称select * from #tmp a 
    where 药品名称 in (select top 5 药品名称 from #tmp where 医生代码=a.医生代码 order by 药品金额 desc)