费用表 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 五官科
…………………
另,能不能对以上这三种分组,合并到一个表中?
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 五官科
…………………
另,能不能对以上这三种分组,合并到一个表中?
union all
select ... 按 医师分组表 SFD_YS的查询
union all
select ... 按 科室分组表 SFD_KS的查询
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
表中的 RQ 是 datetime 类型,分组时包含了时间(这样,每天还是有多条记录),现在必须以日期分组,即,每个分组中每天最多只能有 1 条录。
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
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 日期
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]
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
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