步骤一:收费标准库中提取按天计费的医疗服务项目,分别生成“ECHO日收费标准表”和”HIS日收费标准表”。
步骤二:根据日收费标准表查询ECHO(旧)和HIS(新)系统中的收费明细表中的所有重复收费记录。
首先尝试使用游标方式进行查询,因数据量太大,执行效率太低,之后改成了SQL查询语句。建议超过1万条记录的均不宜采用游标查询方式。
1.游标查询语句:
declare @住院号 nvarchar(10),@姓名 nvarchar(20),@年龄 decimal(11,0),@入院日期 datetime,@出院日期 datetime,@记帐时间 datetime,@收费明细序 nvarchar(12),@费用编码 nvarchar(10),@发生额 decimal(15,4),@费用类别 nvarchar(4),@账目有效标 nvarchar(2),@记账次数 decimal(15,4),@收费标准编 nvarchar(9),@收费标准 nvarchar(255),@单位 nvarchar(255),@id int
declare yb1 cursor
for
select [住院号],[姓名], [年龄],[入院日期],[出院日期],[收费明细序],[费用编码],[发生额],[记帐时间],[费用类别],[账目有效标],[记账次数],[收费标准编],id,b.[收费标准],b.[单位]
from dbo.[住院收费汇总表-01-03] a
join dbo.[ECHO系统日收费标准] b on a.费用编码=b.收费标准编码 where b.单位 like '%日%' or b.单位 like '%天%'
order by id
open yb1
fetch next from yb1 into @住院号,@姓名,@年龄,@入院日期,@出院日期,@收费明细序,@费用编码,@发生额,@记帐时间,@费用类别,@账目有效标,@记账次数,@收费标准编,@id,@收费标准,@单位
while @@FETCH_STATUS=0
begin
insert into dbo.[ECHO系统住院重复收费记录] select [住院号],[姓名], [年龄],[入院日期],[出院日期],[收费明细序],[费用编码],[发生额],[记帐时间],[费用类别],[账目有效标],[记账次数],[收费标准编],b.[收费标准],b.[单位]
from dbo.[住院收费汇总表-01-03] a
join dbo.[ECHO系统日收费标准] b on a.费用编码=b.收费标准编码where a.id>@id
and a.住院号=@住院号 and a.姓名=@姓名 and a.发生额=@发生额 and a.费用类别=@费用类别 and a.费用编码=@费用编码
and CONVERT(varchar(10),a.入院日期,110)= CONVERT(varchar(10),@入院日期,110)
and CONVERT(varchar(10),a.出院日期,110)= CONVERT(varchar(10),@出院日期,110)
and CONVERT(varchar(10),a.记帐时间,110)= CONVERT(varchar(10),@记帐时间,110)
and (b.单位 like '%日%' or b.单位 like '%天%')
fetch next from yb1 into @住院号,@姓名,@年龄,@入院日期,@出院日期,@收费明细序,@费用编码,@发生额,@记帐时间,@费用类别,@账目有效标,@记账次数,
@收费标准编,@id,@收费标准,@单位
end
close yb1
deallocate yb1
2.SQL查询方式:
查询a.[住院号],a.[姓名], a.[年龄],a.[入院日期],a.[出院日期],a.[费用编码]等字段都相同,,a.[收费明细序]字段不同的记录。视为同一天多次计费。
(1)ECHO系统SQL语句如下:
insert intodbo.[ECHO系统住院重复收费记录]
select a.[住院号],a.[姓名], a.[年龄],CONVERT(varchar(10),a.入院日期,110) as 入院日期 ,
CONVERT(varchar(10),a.出院日期,110) as [出院日期],a.[收费明细序],a.[费用编码],a.[发生额],
CONVERT(varchar(10),a.记帐时间,110) as [记账时间],a.[记账次数],d.收费标准,d.单位
fromdbo.[住院收费汇总表-01-03]a left join dbo.[ECHO系统标准过渡表] d on a.费用编码=d.收费标准编码
where exists (select 1
from(select 住院号,记帐时间,费用编码
fromdbo.[住院收费汇总表-01-03]
groupby 住院号,记帐时间,费用编码
havingcount(*)> 1) b
whereCONVERT(varchar(10),a.记帐时间,110)= CONVERT(varchar(10),b.记帐时间,110)
and a.费用编码=b.费用编码 and a.住院号=b.住院号
) and (d.单位 like '%天%' or d.单位 like '%日%')
(2)HIS系统SQL语句:
insert into dbo.[HIS系统住院重复收费记录]
select a.[姓名], CONVERT(varchar(10),a.入院时间,110) as 入院日期 ,
CONVERT(varchar(10),a.出院时间,110) as [出院日期],
cast(a.收费项目数量 as float)*cast(a.单价 as float) as [发生额],
CONVERT(varchar(10),a.开医嘱日期,110) as [记账时间],a.收费项名称,a.单位,a.卡号,
备注='HIS系统1',a.[收费项编码],a.收费项目数量 as 数量
fromdbo.[新系统数据表1] a
where exists (select 1
from(select 卡号,开医嘱日期,收费项编码
fromdbo.[新系统数据表1]
groupby 卡号,开医嘱日期,收费项编码
havingcount(*)> 1) b
whereCONVERT(varchar(10),a.开医嘱日期,110)= CONVERT(varchar(10),b.开医嘱日期,110)
and a.收费项编码=b.收费项编码 and a.卡号=b.卡号
) and (a.单位 like '%天%' or a.单位 like '%日%')
分年度生成住院重复收费记录表。
步骤三:查询结果整理,删除HIS系统测试记录。
SELECT DISTINCT([登记号]),[卡号],max(datediff(day,入院时间,出院时间)) as 住院天数FROM [县医院版信息系统数据].[dbo].[新系统数据表1]where [住院或门诊]='i' and 出院时间 is not null and 姓名 not like '%测试%' and 卡号 not like '%测试%'group by 登记号,卡号
步骤四:根据查询的重复收费记录进行统计重复记录数和金额。
(1)ECHO系统SQL语句:
SELECTDISTINCT(住院号),姓名,费用编码,[收费标准],a.[单位],记帐时间,sum(cast(记账次数 as float)) as 当日收费次数,SUM(发生额) as 当日金额FROM [dbo].[ECHO系统住院重复收费记录] agroup by 住院号,姓名,费用编码,[收费标准],a.[单位],记帐时间 order by 当日金额 desc
(2)HIS系统SQL语句:
SELECTDISTINCT(卡号),姓名,费用编码,[收费标准],a.[单位],记帐时间,sum(cast(数量 as float)) as 当日收费次数,SUM(发生额) as 当日金额,备注 FROM [县医院版信息系统数据].[dbo].[HIS系统住院重复收费记录] agroup by 卡号,姓名,费用编码,[收费标准],a.[单位],记帐时间,备注 order by 当日收费次数 desc
生成ECHO系统住院重复收费记录初表和HIS系统住院重复收费记录初表。经医院核实后,造成同一天多次收费情况的主要原因是冲账、补记或一次性记录多天应收费用。