费用表 SFD 有以下各列:LSH   流水号(主键)
SFLB  费用类别        (类别有 西药 成药 草药 检查 等)
SJFY  费用金额
RQ    日期 
KZYS  医师
KDKS  科室由于 每天费用记录太多,查询太消耗时间,现在希望生成如下表,按日期分组汇总1、按 费用类别分组表 SFD_LB:        表中的类别,只统计当日在费用表 SFD 的 SFLB 列中出现的类别日       期    类别     汇总金额 
2009-03-01   西药费     
2009-03-01   成药费
2009-03-01   草药费
    ………………
2009-03-02   西药费
2009-03-02   成药费
2009-03-02   草药费
    …………………
    …………………
2009-03-31   西药费
2009-03-31   成药费
2009-03-31   草药费
    …………………2、按 医师分组表 SFD_YS:     表中的医师,只统计当日在费用表 SFD 的 KZYS 列中出现的医师日       期    医师     汇总金额 
2009-03-01   张三
2009-03-01   李四
2009-03-01   王五
    ………………
2009-03-02   张三
2009-03-02   李四
2009-03-02   王五
    …………………
3、按 科室分组表 SFD_KS:     表中的科室,只统计当日在费用表 SFD 的 KDKS 列中出现的科室日       期    科室     汇总金额 
2009-03-01   内科
2009-03-01   骨伤科
2009-03-01   外科
    ………………
2009-03-02   外科
2009-03-02   儿科
2009-03-02   五官科
    …………………
另,能不能对以上这三种分组,合并到一个表中?

解决方案 »

  1.   

    用union allselect ... 按 费用类别分组表 SFD_LB的查询
    union all
    select ... 按 医师分组表 SFD_YS的查询
    union all
    select ... 按 科室分组表 SFD_KS的查询
      

  2.   

    group by 后用union all
      

  3.   

    请仔细看,目前数据库中只有费用表 SFD ,其他表是需要重新生成的。我需要的就是生成三个分组表。
      

  4.   

    select RQ ,SFLB,sum(SJFY) 汇总金额 from SFD group by RQ ,SFLB
    union all
    select RQ ,KZYS,sum(SJFY) 汇总金额 from SFD group by RQ ,KZYS
    union all
    select RQ ,KDKS,sum(SJFY) 汇总金额 from SFD group by RQ ,KDKS
      

  5.   

    回 10 楼,已经符合要求了,但是:
    表中的 RQ 是 datetime 类型,分组时包含了时间(这样,每天还是有多条记录),现在必须以日期分组,即,每个分组中每天最多只能有 1 条录。
      

  6.   

    我在一楼就告诉你用union all了.原来你没有看懂?如果是对日期分组.select convert(varchar(10),RQ,120) rq ,SFLB,sum(SJFY) 汇总金额 from SFD group by convert(varchar(10),RQ,120) ,SFLB
    union all
    select convert(varchar(10),RQ,120) ,KZYS,sum(SJFY) 汇总金额 from SFD group by convert(varchar(10),RQ,120) ,KZYS
    union all
    select convert(varchar(10),RQ,120) ,KDKS,sum(SJFY) 汇总金额 from SFD group by convert(varchar(10),RQ,120) ,KDKS
      

  7.   

    datediff格式转换日期,就没有时间了
      

  8.   

    好像基本上对了吧,是不是对日期进行排序呢?
    select * 
    from 
        (select convert(varchar(10),RQ,120) 日期 ,SFLB 类别,sum(SJFY) 汇总金额 from SFD group by convert(varchar(10),RQ,120) ,SFLB
         union all
        select convert(varchar(10),RQ,120) ,KZYS,sum(SJFY) 汇总金额 from SFD group by convert(varchar(10),RQ,120) ,KZYS
        union all
        select convert(varchar(10),RQ,120) ,KDKS,sum(SJFY) 汇总金额 from SFD group by convert(varchar(10),RQ,120) ,KDKS
        ) t
    order by 日期
      

  9.   

    [code=SQL]
    select * from (
    select convert(varchar(10),RQ,120) rq ,SFLB,sum(SJFY) 汇总金额 from SFD group by convert(varchar(10),RQ,120) ,SFLB
    union all
    select convert(varchar(10),RQ,120) ,KZYS,sum(SJFY) 汇总金额 from SFD group by convert(varchar(10),RQ,120) ,KZYS
    union all
    select convert(varchar(10),RQ,120) ,KDKS,sum(SJFY) 汇总金额 from SFD group by convert(varchar(10),RQ,120) ,KDKS
    ) a
    order by rq,SFLB
    [/sql]
      

  10.   

    回 15 楼:已经完全符合要求,现在需要:查询时自动建立表 SRCXB (如果该表存在则删除),并保存查询结果
      

  11.   


    if object_id('数据库名..SRCXB') is not null
       drop table SRCXBselect * into SRCXB from
    (
    select convert(varchar(10),RQ,120) [日      期] ,SFLB [类别],sum(SJFY) [汇总金额] from SFD group by convert(varchar(10),RQ,120) ,SFLB
    union all
    select convert(varchar(10),RQ,120) [日      期],KZYS [类别],sum(SJFY) [汇总金额] from SFD group by convert(varchar(10),RQ,120) ,KZYS
    union all
    select convert(varchar(10),RQ,120) [日      期],KDKS [类别],sum(SJFY) [汇总金额] from SFD group by convert(varchar(10),RQ,120) ,KDKS
    ) t
      

  12.   


    if object_id('DBName..SRCXB') is not null
       drop table SRCXB
    go
    select * 
    into SRCXB
    from 
        (select convert(varchar(10),RQ,120) 日期 ,SFLB 类别,sum(SJFY) 汇总金额 from SFD group by convert(varchar(10),RQ,120) ,SFLB
         union all
        select convert(varchar(10),RQ,120) ,KZYS,sum(SJFY) 汇总金额 from SFD group by convert(varchar(10),RQ,120) ,KZYS
        union all
        select convert(varchar(10),RQ,120) ,KDKS,sum(SJFY) 汇总金额 from SFD group by convert(varchar(10),RQ,120) ,KDKS
        ) t
    order by 日期select * from SRCXB
      

  13.   

    select * into 新表名 from 旧表名 产生新表~