精准扶贫审计中扶贫人员家庭分组的方法

作 者:

作者简介:
方心富,南陵县审计局

原文出处:
安徽审计

内容提要:

02


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

关 键 词:

字号:

      2016年12月,安徽省对县区全面开展财政专项扶贫资金专项审计调查,其中一项审计内容就是扶贫信息的精准化。由于地方各级审计机关无法获取到扶贫信息服务器数据,只能从客户端取得EXCEL格式的数据,其数据排列方式如下图:

      

      表中行号2至4系同一家庭,其户主行号为2,排在该户家庭的首位,其他家庭成员的排列方式与此相同,这种顺序是由系统导出时决定的。

      通过SQL SERVER导入向导,将EXCEL数据导入到指定的数据库,因集合是无序的,故不能保证数据按原来的顺序存储。因此在导入之前,需要加上一列序号,以区分记录的顺序。导入后,就可以按顺序输出查询。下图导入到SQL SERVER数据库后的简略格式:

      

      扶贫人员基本信息表应与其他数据源关联分析,如村干部信息表、财政供养人员信息表、工商注册信息表、行驶证信息表、商品房交易明细表等。如果扶贫基本信息表中存在上述人员,则整个家庭成员有可能不具备建档立卡资格。如上表序号4至7为同一家庭,如果序号6在商品房交易中有购房记录,则整个家庭成员均不应列入扶贫对象,应作为审计疑点,延伸审查。

      由其中1名家庭成员疑点扩大到整个家庭,就需要对数据进行分组,即相同的家庭成员为一组,如果家庭成员其中之一不符合建档立卡标准,进而将整个家庭成员视为疑点。问题的关键是如何将扶贫家庭分组,分组的标志又是什么呢?从上表的数据排列方式可以看出,每个家庭都有户主(1人家庭,户主即为本人),因此可以将户主的证件号码作为每个家庭的分组标志。

      SELECT序号

      ,证件号码

      ,与户主关系

      ,(SELECT证件号码

      FROM模拟数据

      WHERE序号=(SELECT MAX(序号)

      FROM模拟数据mm

      WHERE mm.序号<=m.序号

      AND mm.与户主关系='户主'))AS户主证件号码

      FROM模拟数据m:

      执行结果如下:

      

      语句分析:本例采用相关子查询实现,外部主查询查询模拟数据表中的每一条记录,主列表中的子查询将返回“户主关系”为“户主”,且取小于等于当前序号的最大序号。如:

      针对序号6,外部查询返回序号6的记录,主列表中的子查询则获取小于或等于序号6,且为户主的序号,即1与4,然后取其最大值,结果是序号4的证件号码,对于序号1至10,每次都需要作类似的查询。

      以上代码在SQL SERVER、ORACLE、ACCESS等数据库均可运行。

      SELECT序号

      ,证件号码

      ,与户主关系

      ,(SELECT TOP(1)证件号码

      FROM模拟数据mm

      WHERE mm.序号<=m.序号

      AND mm.与户主关系='户主'

      ORDER BY序号DESC)户主证件号码

      FROM模拟数据m:

      执行结果与上述相同。

      语法分析:外部主查询针对返回的每条记录,内部查询取得小于或等于外部序号的记录,并且“与户关系”为“户主”的全部序号,然后按序号降序排列,即获得最大值序号的证件号码。

      这种方法为SQL SERVER所独有,相比解一,它具备更好的性能。

      ——UDF解决方案

      CREATE FUNCTION fn_

      GetMaID(@n INT,@xh INT)

      RETURNS TABLE

      WITH SCHEMABINDING

      ——绑定数据表

      RETURN

      SELECT TOP(@n)证件号码AS户主证件号码

      FROM dbo.模拟数据WHERE序号<=@xh

      AND与户主关系='户主'

      ORDER BY序号DESC;

      SELECT m.序号

      ,m.姓名

      ,m.证件号码

      ,m.与户主关系

      ,m.人数

      ,v.户主证件号码

      FROM模拟数据m

      CROSS APPLY dbo.fn_GetMaID(1,m.序号)v;

      分析:先定义一个用户自定义函数(UDF),返回“与户主关系”为“户主”、序号小于指定值、并按序号降序排列,取前n项证件号码的表值函数,函数中使用了“WITH SCHEMABINDING”选项,是为了将函数与数据绑定,以防止架构的更改,导致函数失效。在查询语句中,使用APPLY语法,对于来源于模拟数据表中每一行,UDF计算引用该表(左表)中每个序号,获得大于或等于左表序号、且“与户关系”为“户主”的记录,然后按序号降序排列,取第一条记录。

相关文章: