我有一张表字段名:
yp varchar2(2) --药品类型(1-药品,2-诊疗)
fy varchar2(4) --费用类型(1-西药,2-中药品,3-材料等)
yblx varcahr2(2)--医保类型(1-甲类,2-乙类,3-丙类)
dj number(14,4)--单价
sl number(9)--数量
je number(14, 4)--金额想要一简单的写法,不想用一直用union all来实现
要实现的效果如下:
类型 项目 单价 数量 金额
药品 药品合计 2294.2094 8527 11431.7122
西药 2294.2094 8527 11431.7122
甲类 xxx xxx xx
乙类 xxx xxx xx
丙类 xxx xxx xx
诊疗 诊疗合计 3333 345 3445565
检查费 1290.2 30 1336.2
甲类 xxx xxx xx
乙类 xxx xxx xx
丙类 xxx xxx xx
床位费 31 17 271
甲类 xxx xxx xx
乙类 xxx xxx xx
丙类 xxx xxx xx
治疗费 41 13 415
甲类 xxx xxx xx
乙类 xxx xxx xx
丙类 xxx xxx xx
化验费 1094.6 134 1166
甲类 xxx xxx xx
乙类 xxx xxx xx
丙类 xxx xxx xx
yp varchar2(2) --药品类型(1-药品,2-诊疗)
fy varchar2(4) --费用类型(1-西药,2-中药品,3-材料等)
yblx varcahr2(2)--医保类型(1-甲类,2-乙类,3-丙类)
dj number(14,4)--单价
sl number(9)--数量
je number(14, 4)--金额想要一简单的写法,不想用一直用union all来实现
要实现的效果如下:
类型 项目 单价 数量 金额
药品 药品合计 2294.2094 8527 11431.7122
西药 2294.2094 8527 11431.7122
甲类 xxx xxx xx
乙类 xxx xxx xx
丙类 xxx xxx xx
诊疗 诊疗合计 3333 345 3445565
检查费 1290.2 30 1336.2
甲类 xxx xxx xx
乙类 xxx xxx xx
丙类 xxx xxx xx
床位费 31 17 271
甲类 xxx xxx xx
乙类 xxx xxx xx
丙类 xxx xxx xx
治疗费 41 13 415
甲类 xxx xxx xx
乙类 xxx xxx xx
丙类 xxx xxx xx
化验费 1094.6 134 1166
甲类 xxx xxx xx
乙类 xxx xxx xx
丙类 xxx xxx xx
数据:
yp fy yblx dj sl je
1 1 1 1 1 1
1 2 1 1 1 1
1 1 2 1 1 1
2 1 1 1 1 1
2 2 1 1 1 1
1 1 2 1 1 1
我要实现的效果:
药品 药品合计 3 3 3
西药 1 1 1
甲类 xxx xxx xx
乙类 xxx xxx xx
丙类 xxx xxx xx
诊疗 诊疗合计 3 3 3
检查费 1 1 1
甲类 xxx xxx xx
乙类 xxx xxx xx
丙类 xxx xxx xx
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([yp] int,[fy] int,[yblx] int,[dj] int,[sl] int,[je] int)
insert [tb]
select 1,1,1,1,1,1 union all
select 1,2,1,1,1,1 union all
select 1,1,2,1,1,1 union all
select 2,1,1,1,1,1 union all
select 2,2,1,1,1,1 union all
select 1,1,2,1,1,1
---查询---
select case when px!=1 then '' else 类型 end as 类型,项目,单价,数量,金额
from(
select
px=row_number() over(partition by yp order by
case when yp is null then 1 else 2 end,
yp,
case when fy is null then 1 else 2 end,
fy,
case when yblx is null then 1 else 2 end),
类型=yp,
项目=isnull(isnull(cast(yblx as varchar(10)),fy),yp+'合计'),
单价=sum(dj),
数量=sum(sl),
金额=sum(je)
from(
select
yp=case yp when 1 then '药品' when 2 then '诊疗' end,
fy=case fy when 1 then '西药' when 2 then '中药品' when 3 then '材料等' end,
yblx= case yblx when 1 then '甲类' when 2 then '乙类' when 3 then '丙类' end,
dj,sl,je
from tb
) t group by yp,fy,yblx with rollup
)t2
where 类型 is not null
---结果---
/**
类型 项目 单价 数量 金额
---- ---------- ----------- ----------- -----------
药品 药品合计 4 4 4
西药 3 3 3
甲类 1 1 1
乙类 2 2 2
中药品 1 1 1
甲类 1 1 1
诊疗 诊疗合计 2 2 2
西药 1 1 1
甲类 1 1 1
中药品 1 1 1
甲类 1 1 1(11 行受影响)
**/