在审计实践工作中,经常会涉及多表比较的情况,常用的方法是使用表与表连接查询,但当表表之间未能直接构成连接条件时,会导致查询工作量大幅度增加,从而影响审计效率的提高。笔者以某行政事业单位及国有企业收到征收拆迁资金专项审计为例,通过编写T-SQL语句,实现多表关联分析,进而较为快捷地确定查询结果。 一、审计思路 审计人员对《征收拆迁调查表》、《统筹办支付拆迁资金明细》和《拆迁项目跟踪统计表》三张表进行两两比较,找出调查表中未填报或少填报的数据;通过比较《征收拆迁调查表》与《国有资产统计表》找出属于国有资产拆迁的数据。 二、具体步骤 第一步:比较实付、实收拆迁补偿金额 分析《征收拆迁调查表》、《统筹办支付拆迁资金明细》两张表,按被拆迁单位分组对实付、实收拆迁补偿金额进行统计,比较两者间的差异,找出统筹办实付拆迁补偿金额大于单位实收拆迁补偿金额的情况。 T-SQL语句如下:
select ISNULL(a被拆迁单位全称,b.付款单位全称)as单位名称,(付款金额-isnull(实收补偿金额,0))as差异额 (select被拆迁单位全称,SUM(实收补偿金额)as实收补偿金额from征收拆迁调查表group by被拆迁单位全称)a full join (select付款单位全称,SUM(付款金额)as付款金额from统筹办支付拆迁资金明细group by付款单位全称)b on a.被拆迁单位全称=b.付款单位全称 第二步:涉及拆迁数量比较 对《征收拆迁调查表》和《统筹办支付拆迁资金明细》表按被拆迁单位分别统计填报拆迁数量与拆迁跟踪数量。 T-SQL语句如下: select ISNULL(a.被拆迁单位全称,b.被拆迁单位全称)as单位名称,(拆迁跟踪数量-isnull(填报拆迁数量,0)as差异额 (select被拆迁单位全称,count(distinct被拆迁房屋地址)as填报拆迁数量from征收拆迁调查表group by被拆迁单位全称)a full join (select被拆迁单位全称,count(distinct拆迁合同标的)as拆迁跟踪数量from拆迁项目跟踪统计表group by被拆迁单位全称)b on a.被拆迁单位全称=b.被拆迁单位全称 第三步:找出属于国有资产的拆迁数据 分析《征收拆迁调查表》、《国有资产统计表》两表时发现其关联条件房屋地址由于填报口径不一致,不能简单地进行表与表连接查询,使用like等语句也无法达到模糊比较的效果,所以审计人员想到先用while循环语句提取地址中的数值部分,再通过使用游标实现初步比较,最后分析数据找出属于国有资产的拆迁数据。
T-SQL语句如下: ——第一层游标:提取各单位地址中的数字 declare @dwqc char(30),@cqdz char(50) declare dztq_cursor cursor for select被拆迁单位全称,被拆迁房屋地址from征收拆迁调查表 open dztq_cursor fetch next from dztq_cursor into @dwqc,@cqdz while @@FETCH_STATUS=0
begin print ‘查找发现与’+rtrim(@dwqc)+’拆迁地址(‘+rtrim(@cqdz)+’)相似的有’ ——使用while循环提取地址中的数字 declare @x int,@y int,@z int set @x=1 while substring(@cqdz,@x,1)not like ‘[0-9]’ begin set @x=@x+1 set @y=@x while substring(@cqdz,@y,1) like '[0-9]’ begin set @y=@y+1 set@z=@y-@x ——第二层游标实现类似比较的功能 declare @dz char(50) declare cz_cursor cursor for select distinct房屋地址from征收拆迁调查表a join固定资产清查表b on a.被拆迁单位全称=b.单位全称and房屋地址like‘%’+substring(@cqdz,@x,@z)+‘%’