数据库是SQL2000,表结构如下:住院ID号 费用类型 费用名称 规格 数量 单价 日期2004110001 西药费 四环素 100# 100 1.5 2007-01-01
2004110001 西药费 四环素 100# 8 1.5 2007-01-02
2004110001 中药费 人参 2g 76 1 2007-01-02
2004110001 西药费 四环素 100# 1 3 2007-01-02
2004110001 西药费 皮康箱 10ml 2 2.5 2007-01-04
2004110001 中药费 苍耳子 7g 2 0.8 2007-01-02
2004110001 低值耗材 一次性注射器 3 1.4 2007-01-04
2004110001 西药费 皮康箱 10ml 2 4 2007-01-04
2004110001 西药费 滴药水 3ml 23 17 2007-01-05
2004110001 中药费 樟木 10g 12 1 2007-01-05要求报表打印出如下结果:费用名称 规格 数量 单价 金额.四环素 100# 109 1.5 163.5
.皮康箱 10ml 4 2.5 10
.滴药水 3ml 23 1 23
--------------------------------西药费 合计: 196.5元
.
人参 2g 5 70 350
樟木 10g 12 1.2 22.4---------------------------------中药费 小计: 13元..(同上,略).
------------------------------总合计: 元(具体要求: <1>要在报表中体现如上结果,使用的报表控件请说明
<2>每种相同的药名和规格,数量要合计在一行显示。如四环素
<3>每种费用类型小计,报表最后有个总合计。)
2004110001 西药费 四环素 100# 8 1.5 2007-01-02
2004110001 中药费 人参 2g 76 1 2007-01-02
2004110001 西药费 四环素 100# 1 3 2007-01-02
2004110001 西药费 皮康箱 10ml 2 2.5 2007-01-04
2004110001 中药费 苍耳子 7g 2 0.8 2007-01-02
2004110001 低值耗材 一次性注射器 3 1.4 2007-01-04
2004110001 西药费 皮康箱 10ml 2 4 2007-01-04
2004110001 西药费 滴药水 3ml 23 17 2007-01-05
2004110001 中药费 樟木 10g 12 1 2007-01-05要求报表打印出如下结果:费用名称 规格 数量 单价 金额.四环素 100# 109 1.5 163.5
.皮康箱 10ml 4 2.5 10
.滴药水 3ml 23 1 23
--------------------------------西药费 合计: 196.5元
.
人参 2g 5 70 350
樟木 10g 12 1.2 22.4---------------------------------中药费 小计: 13元..(同上,略).
------------------------------总合计: 元(具体要求: <1>要在报表中体现如上结果,使用的报表控件请说明
<2>每种相同的药名和规格,数量要合计在一行显示。如四环素
<3>每种费用类型小计,报表最后有个总合计。)
住院ID号 varchar(20),
费用类型 varchar(20),
费用名称 varchar(20),
规格 varchar(10),
数量 int,
单价 decimal(10,2),
日期 datetime)
insert t select '2004110001','西药费','四环素','100#','100','1.5','2007-01-01'
union all select '2004110001','西药费','四环素','100#','8','1.5','2007-01-02'
union all select '2004110001','中药费','人参','2g','76','1','2007-01-02'
union all select '2004110001','西药费','四环素','100#','1','1.5','2007-01-02'
union all select '2004110001','西药费','皮康箱','10ml','2','2.5','2007-01-04'
union all select '2004110001','西药费','苍耳子','7g','2','2.5','2007-01-04'
union all select '2004110001','低值耗材','一次性注射器','','3','1.4','2007-01-04'
union all select '2004110001','西药费','皮康箱','10ml','2','4','2007-01-04'
union all select '2004110001','西药费','滴药水','3ml','23','17','2007-01-05'
union all select '2004110001','西药费','樟木','10g','12','1','2007-01-05'select 费用类型=(case when grouping(费用名称)=1 and grouping(费用类型)<>1 then '合计'
when grouping(费用类型)=1 and grouping(费用名称)=1 then '总计'
else 费用类型 end),
费用名称=(case when grouping(费用名称)=1 then '' else 费用名称 end),
规格=(case when grouping(费用名称)=1 then '' else cast(min(规格) as varchar) end),
数量=(case when grouping(费用名称)=1 then '' else cast(sum(数量) as varchar) end),
单价=(case when grouping(费用名称)=1 then '' else cast(avg(单价) as varchar) end),
金额=sum(单价*数量)
from t group by 费用类型,费用名称 with rollupdrop table t/*
费用类型 费用名称 规格 数量 单价 金额
-------------------- -------------------- ------------------------------ ------------------------------ ------------------------------ ----------------------------------------
低值耗材 一次性注射器 3 1.400000 4.20
合计 4.20
西药费 苍耳子 7g 2 2.500000 5.00
西药费 滴药水 3ml 23 17.000000 391.00
西药费 皮康箱 10ml 4 3.250000 13.00
西药费 四环素 100# 109 1.500000 163.50
西药费 樟木 10g 12 1.000000 12.00
合计 584.50
中药费 人参 2g 76 1.000000 76.00
合计 76.00
总计 664.70*/
你自己把SQL执行看结果吧 ~~~
靠~~三连击了~~开马甲开先
还是整理结果吧~~这年头 分难挣啊
测试结果:
费用类型 费用名称 规格 数量 单价 金额
----------------------------- ----------------------
低值耗材 一次性注射器 3 1.400000 4.20
合计 4.20
西药费 苍耳子 7g 2 2.500000 5.00
西药费 滴药水 3ml 23 17.000000 391.00
西药费 皮康箱 10ml 4 3.250000 13.00
西药费 四环素 100# 109 1.500000 163.50
西药费 樟木 10g 12 1.000000 12.00
合计 584.50
中药费 人参 2g 76 1.000000 76.00
合计 76.00
总计 664.70
费用类型 费用名称 规格 数量 单价 金额
----------------------------- ----------------------
低值耗材 一次性注射器 3 1.400000 4.20
合计 4.20
西药费 苍耳子 7g 2 2.500000 5.00
西药费 滴药水 3ml 23 17.000000 391.00
西药费 皮康箱 10ml 4 3.250000 13.00
西药费 四环素 100# 109 1.500000 163.50
西药费 樟木 10g 12 1.000000 12.00
合计 584.50
中药费 人参 2g 76 1.000000 76.00
合计 76.00
总计 664.70
select 费用类型=(case when grouping(费用类型)=1 and grouping(费用名称)=1 then '总计'
else 费用类型 end),
费用名称=(case when grouping(费用名称)=1 and grouping(费用类型)<>1 then '合计'
when grouping(费用类型)=1 then ''
else 费用名称 end),
规格=(case when grouping(费用名称)=1 then '' else cast(min(规格) as varchar) end),
数量=(case when grouping(费用名称)=1 then '' else cast(sum(数量) as varchar) end),
单价=(case when grouping(费用名称)=1 then '' else cast(avg(单价) as varchar) end),
金额=sum(单价*数量)
from t group by 费用类型,费用名称 with rollup/*
费用类型 费用名称 规格 数量 单价 金额
----------------------------- ----------------------
低值耗材 一次性注射器 3 1.400000 4.20
低值耗材 合计 4.20
西药费 苍耳子 7g 2 2.500000 5.00
西药费 滴药水 3ml 23 17.000000 391.00
西药费 皮康箱 10ml 4 3.250000 13.00
西药费 四环素 100# 109 1.500000 163.50
西药费 樟木 10g 12 1.000000 12.00
西药费 合计 584.50
中药费 人参 2g 76 1.000000 76.00
中药费 合计 76.00
总计 664.70*/
when grouping(费用名称)=0 then 费用类型
when grouping(费用类型)=1 then '总计'
else '' end,
费用名称=case
when grouping(费用名称)=0 then 费用名称
when grouping(费用名称)=1 and grouping(费用类型)=0 then 费用类型+'合计'
else '' end,
规格=case
when grouping(费用名称)=1 then ''
else 规格 end,
数量=case
when grouping(费用名称)=1 then ''
else 数量 end,
单价=case when grouping(费用名称)=1 then ''
else 单价 end,
金额=SUM(数量*单价)
FROM TABLE
GROUP BY 费用类型,费用名称 WITH ROLLUP
insert into tb values('2004110001','西药费' , '四环素' , '100#', 100, 1.5, '2007-01-01')
insert into tb values('2004110001','西药费' , '四环素' , '100#', 8 , 1.5, '2007-01-02')
insert into tb values('2004110001','中药费' , '人参' , '2g' , 76, 1 , '2007-01-02')
insert into tb values('2004110001','西药费' , '四环素' , '100#', 1 , 3 , '2007-01-02')
insert into tb values('2004110001','西药费' , '皮康箱' , '10ml', 2 , 2.5, '2007-01-04')
insert into tb values('2004110001','中药费' , '苍耳子' , '7g' , 2, 0.8, '2007-01-02')
insert into tb values('2004110001','低值耗材', '一次性注射器', '随便写的' , 3 , 1.4 , '2007-01-04')
insert into tb values('2004110001','西药费' , '皮康箱' , '10ml', 2 , 4 , '2007-01-04')
insert into tb values('2004110001','西药费' , '滴药水' , '3ml', 23 , 17 , '2007-01-05')
insert into tb values('2004110001','中药费' , '樟木' , '10g', 12 , 1 , '2007-01-05')
goselect 费用名称,规格,数量,单价,金额 from
(
select * from
(
select 费用类型,费用名称,规格,cast(sum(数量) as varchar) 数量,cast(单价 as varchar) 单价,cast(sum(数量*单价) as varchar) 金额
from tb
group by 费用类型,费用名称,规格,单价 with rollup
) t
where 单价 is not null
union all
select 费用类型,费用名称=费用类型,规格='合计',数量 = '',单价 = '',sum(数量*单价) 金额 from tb group by 费用类型
union all
select 费用类型='总合计',费用名称='总合计',规格='',数量 = '',单价 = '',sum(数量*单价) 金额 from tb
) m
order by 费用类型,case 规格 when '合计' then 2 else 1 enddrop table tb
/*
费用名称 规格 数量 单价 金额
-------------------- ---------- ------------------------------ ------------------------------ ----------------------------------------
一次性注射器 随便写的 3 1.40 4.20
低值耗材 合计 4.20
滴药水 3ml 23 17.00 391.00
皮康箱 10ml 2 2.50 5.00
皮康箱 10ml 2 4.00 8.00
四环素 100# 108 1.50 162.00
四环素 100# 1 3.00 3.00
西药费 合计 569.00
樟木 10g 12 1.00 12.00
苍耳子 7g 2 0.80 1.60
人参 2g 76 1.00 76.00
中药费 合计 89.60
总合计 662.80(所影响的行数为 13 行)*/
insert into tb values('2004110001','西药费' ,'四环素' ,'100#', 100,1.5,'2007-01-01')
insert into tb values('2004110001','西药费' ,'四环素' ,'100#', 8 ,1.5,'2007-01-02')
insert into tb values('2004110001','中药费' ,'人参' ,'2g' , 76, 1 ,'2007-01-02')
insert into tb values('2004110001','西药费' ,'四环素' ,'100#', 1 , 3 ,'2007-01-02')
insert into tb values('2004110001','西药费' ,'皮康箱' ,'10ml', 2 , 2.5,'2007-01-04')
insert into tb values('2004110001','中药费' ,'苍耳子' ,'7g' , 2, 0.8,'2007-01-02')
insert into tb values('2004110001','低值耗材','一次性注射器','随便写的',3 ,1.4,'2007-01-04')
insert into tb values('2004110001','西药费' ,'皮康箱' ,'10ml', 2 ,4 ,'2007-01-04')
insert into tb values('2004110001','西药费' ,'滴药水' ,'3ml', 23 ,17 ,'2007-01-05')
insert into tb values('2004110001','中药费' ,'樟木' ,'10g', 12 ,1 ,'2007-01-05')
goselect 费用名称,规格,数量,单价,金额 from
(
select * from
(
select 费用类型,费用名称,规格,cast(sum(数量) as varchar) 数量,cast(单价 as varchar) 单价,cast(sum(数量*单价) as varchar) 金额
from tb
group by 费用类型,费用名称,规格,单价 with rollup
) t
where 单价 is not null
union all
select 费用类型,费用名称=费用类型,规格='合计',数量 = '',单价 = '',sum(数量*单价) 金额 from tb group by 费用类型
union all
select 费用类型='总合计',费用名称='总合计',规格='',数量 = '',单价 = '',sum(数量*单价) 金额 from tb
) m
order by 费用类型,case 规格 when '合计' then 2 else 1 enddrop table tb/*
费用名称 规格 数量 单价 金额
-------------------- ---------- ---- ------------------------------ -----
一次性注射器 随便写的 3 1.40 4.20
低值耗材 合计 4.20
滴药水 3ml 23 17.00 391.00
皮康箱 10ml 2 2.50 5.00
皮康箱 10ml 2 4.00 8.00
四环素 100# 108 1.50 162.00
四环素 100# 1 3.00 3.00
西药费 合计 569.00
樟木 10g 12 1.00 12.00
苍耳子 7g 2 0.80 1.60
人参 2g 76 1.00 76.00
中药费 合计 89.60
总合计 662.80
(所影响的行数为 13 行)
*/