巧用SQL语句实现多表关联比较查询

作 者:

作者简介:
帅青燕,熊文静,武汉市江岸区审计局

原文出处:
审计月刊

内容提要:


期刊代号:V3
分类名称:审计文摘
复印期号:2015 年 03 期

关 键 词:

字号:

      在审计实践工作中,经常会涉及多表比较的情况,常用的方法是使用表与表连接查询,但当表表之间未能直接构成连接条件时,会导致查询工作量大幅度增加,从而影响审计效率的提高。笔者以某行政事业单位及国有企业收到征收拆迁资金专项审计为例,通过编写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)+‘%’

相关文章: