会计数据审计分析九大算法实例Word格式.docx
《会计数据审计分析九大算法实例Word格式.docx》由会员分享,可在线阅读,更多相关《会计数据审计分析九大算法实例Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
selecta.iperiod,a.csign,a.ino_id,a.ccode,b.ccode_name,a.md,a.mc
fromGL_accvouchajoincodebona.ccode=b.ccodewherea.ccode_equallike'
%,101%'
ora.ccode_equallike'
101%'
orderbya.iperiod,a.csign,a.ino_id,a.ccode
selecta.ccode科目代码,ccode_name科目名称,SUM(md)借方发生额,SUM(mc)贷方发生额
fromGL_accvouchajoincodebona.ccode=b.ccode
whereccode_equallike'
orccode_equallike'
groupbya.ccode,ccode_name
/*第二算法赊销算法,借方一个科目,贷方一个科目。
如借应收账款/票据贷:
主营业务收入/产品销售收入
查凭证比查记录多张表。
从题意看有二个条件,即凭证中要有应收科目和主营业务收入科目,所以要三张表,a表是查询结果凭证,
--------b表设应收条件,c表设主营业务收入条件。
检索出所有赊销收入明细账记录。
赊销:
已销售,没收到钱。
--第一种方式可以利用产品销售收入的对应科目code_equal来完成
select*fromGL_accvouch
whereccode='
501'
andccode_equallike'
%113%'
andmc<
0orderbyiperiod,csign,ino_id
--第二种方式内连接方式,求两个集合的交集运算,检查两个表中的共有内容。
显示的是记录而不是凭证。
Selecta.*fromgl_accvouchajoingl_accvouchb
andb.ccode='
113'
anda.mc<
0orderbya.iperiod,a.csign,a.ino_id
检索出所有赊销收入明细账凭证。
或查找各月赊销凭证
--第一种方式两表连接
selecta.*fromGL_accvouchajoinGL_accvouchb
whereb.ccode='
andb.ccode_equallike'
andb.mc<
orderbya.iperiod,a.csign,a.ino_id
--第二种方式三表连接
selecta.*fromGL_accvoucha
joinGL_accvouchbona.iperiod=b.iperiodanda.csign=b.csignanda.ino_id=b.ino_id
joinGL_accvouchconc.iperiod=b.iperiodandc.csign=b.csignandc.ino_id=b.ino_id
whereb.ccodelike'
501%'
andc.ccodelike'
113%'
andC.md<
0andb.mc<
查找各月赊销收入总额
selecta.iperiod期间,SUM(a.mc)收入总额fromGL_accvoucha
wherea.ccodelike'
andb.ccodelike'
andb.md<
0anda.mc<
groupbya.iperiod
selectiperiod,SUM(mc)收入总额fromGL_accvouch
whereccode='
groupbyiperiod
查找各月现销记录
anda.md<
select*fromGL_accvoucha
wherea.ccode='
anda.ccode_equallike'
%501%'
andmd<
查找各月现销凭证
and(c.ccodelike'
orc.ccodelike'
102%'
)andC.md<
查找各月现销收入,分析:
统计各月通过现结方式的现金收入。
selecta.iperiod期间,SUM(a.md)收入
fromGL_accvoucha
where(a.ccodelike'
ora.ccodelike'
)andb.ccodelike'
计算各月收回的销售欠款(应收账款)累计发生额。
分析:
应收账款是113,何谓收回,即113在贷方,借方应为101、102
selecta.iperiod期间,a.ccode,sum(a.mc)mc,SUM(a.md)md
fromGL_accvoucha
0
groupbya.iperiod,a.ccode
计算各月收回的销售欠款(应收账款)凭证。
分解条件:
此凭证借方应为现金或银行存款,贷方为113,要查找凭证
selecta.*fromGL_accvouchajoingl_accvouchb
where(b.ccodelike'
orb.ccodelike'
)andb.md<
0andc.ccodelike'
andc.mc<
and(b.ccode_equallike'
orb.ccode_equallike'
%,113%'
/*第三算法登记一个科目,末登记一个科目的算法。
使用外连接left(right)join。
实现两个集合的差集运算。
找出一个集合中存在而另一个集合不存在的内容*/
检查所有确认收入时,未同时提取应交税金的销售收入明细账记录。
------分析:
先查询凭证中有主营业务收入,再左连接所有提取了应交税金的记录,而右表中为空的即为未提取应交税金的记录。
selecta.*
from(select*fromGL_accvouchwhereccodelike'
0)a
leftjoin(select*fromGL_accvouchwhereccodelike'
221%'
0)b
ona.iperiod=b.iperiodanda.csign=b.csignanda.ino_id=b.ino_id
whereb.iperiodisnull
selecta.*fromGL_accvouchaleftjoin
GL_accvouchbona.iperiod=b.iperiodanda.csign=b.csignanda.ino_id=b.ino_idandb.ccodelike'
andb.iperiodisnullanda.mc<
--第一个视图,获取所有有501主营业务收入的记录
createviewa_1as
select*fromGL_accvouchwhereccodelike'
--第二个视力,获取所有有221%提取税金的记录
createviewa_2
asselect*fromGL_accvouchwhereccodelike'
--最后,一视图左连接二视图,检查右边记录为空的所有记录,即为确认收入时未同时提取应交税金。
createviewa_3
as
selecta.*froma_1a
leftjoina_2bona.iperiod=b.iperiodanda.csign=b.csignanda.ino_id=b.ino_id
whereb.iperiodisnullorderbya.iperiod,a.csign,a.ino_id
dropviewa_1,a_2
检查漏缴税款的凭证
------分析用有主营业务收入的a表(子查询)作查询结果凭证,再与有提取税金的B表(子查询)进行左连接,右为空的即为所求。
selecta.*fromGL_accvoucha
join(selecta.*
whereb.iperiodisnull)b
join(
selecta.*fromGL_accvouchaleftjoinGL_accvouchb
ona.iperiod=b.iperiodanda.csign=b.csignanda.ino_id=b.ino_idandb.ccodelike'
0andb.iperiodisnull)b
--在上题的基础上,将凭证表与视图a_3用join连接,而视图a_3中的记录的所在凭证即为漏缴税款的凭证
joina_3bona.iperiod=b.iperiodanda.csign=b.csignanda.ino_id=b.ino_id
dropviewa_3
/*第四算法数据分层算法*/
--利用分组和求和、计数函数实现分层。
三种情况:
0到最大值分层;
正的最小值到最大值分层;
按金额范围分层。
--
(一)从0到最大值分层。
分层:
(1)统计业务发生额的最大值、最小值,分别汇总金额和数量。
分层的关键是找出层宽
--
(2)使用ceiling取整函数进行分层分组汇总,正数“进一法”取整,负数“去尾法”取整。
-----实际上ceiling函数是返回大于或等于所给数值的最小整数。
且注:
5/2=2,5/2.0=2.5
--例将主营业务收入明细账(501科目)记录从0开始到最大值分10层,统计每层业务笔数、金额,以及占总业务笔数、金额的比率。
selectMAX(mc)最大值,MAX(mc)/10层宽,COUNT(*)数量合计,SUM(mc)金额合计
fromGL_accvouchwhereccodelike'
selectcast(CEILING(mc/40800.00)asint)层级,COUNT(*)业务笔数,
cast(COUNT(*)/27.00asnumeric(4,2))数量比率,sum(mc)业务金额合计,cast(sum(mc)/4733700.00asnumeric(4,4))金额比率
0groupbyCEILING(mc/40800.00)
--
(二)从正的最小值到最大值分层
--例将主营业务收入明细账(501科目)记录从正的最小值开始到最大值分10层,层数=ceiling(发生额-最小值)/层宽
--统计每层业务笔数、金额,以及占总业务笔数、金额的比率。
必须要做最小值的判断,使层数的开始为1。
selectMAX(mc)最大值,Min(mc)最小值,(MAX(mc)-MIN(mc))/10层宽,COUNT(*)数量合计,SUM(mc)金额合计
fromGL_accvouch
whereccodelike'
selectCEILING(casewhenmc=6000then1else(mc-6000)/40200.00end)层级,COUNT(*)业务笔数,count(*)/27.00数量占比,
SUM(mc)业务金额合计,SUM(mc)/4733700.00金额占比
groupbyCEILING(casewhenmc=6000then1else(mc-6000)/40200.00end)
--(三)按金额范围分层。
--例将主营业务收入明细账(501科目)记录分为4层,包括2万元以下,2万--3万元,3万--4万元,4万元以上。
--分析:
首先统计每笔业务所属的区间,按区间确定层级增加“层级”列。
然后再按要求进行统计。
selectCOUNT(*)zsl,SUM(mc)zjefromGL_accvouchwhereccodelike'
select层级,COUNT(*)业务笔数,count(*)/27.00数量占比,SUM(mc)业务金额合计,SUM(mc)/4733700.00金额占比
from(select层级=
casewhenmc<
20000then1
whenmcbetween20000and30000then2
whenmcbetween30000and40000then3
whenmc>
40000then4end,*
groupby层级
/*第五算法整理科目的算法*/
从凭证表查询获得以下内容(期间、凭证类型、凭证号、摘要、科目代码、借贷方向、金额),利用CASE语句。
selectiperiod期间,csign凭证类型,ino_id凭证号,a.cdigest摘要,a.ccode科目代码,b.ccode_name科目名称,
casewhenmd<
0then'
借'
whenmc<
贷'
end借贷方向,
0thenmdwhenmc<
0thenmcend金额
fromGL_accvouchajoincodebona.ccode=b.ccode
已知某单位科目代码级次为322。
下列程序可以生成了个新的科目代码表。
表中包含两个字段(科目代码、科目全称)
利用case语句进行判断。
第一个表用来展示,第2表为二级科目表,第3表为三级科目表,第4表为四级科目表......
--按级次来确定需要连接几个表,如题,3个级次则要连接4张表。
分别自连接,利用left构造各级次的代码表
selecta.ccode科目代码,科目全称=b.ccode_name+
casewhenLEN(a.ccode)>
3then'
\'
+c.ccode_nameelse'
'
EnD+
5then'
+d.ccode_nameelse'
end
fromcodea
joincodebonleft(a.ccode,3)=b.ccode
joincodeconleft(a.ccode,5)=c.ccode
joincodedonleft(a.ccode,7)=d.ccode
/*第六算法真实性、完整性、一致性检查的算法
真实性、完整性算法类型比较多,首先看什么是真实性;
什么是完整性,从老师已经讲过的内容来看,
(注意,查真实性完整性,在凭证表中都指的是收入凭证,也就是在凭证表中要设条件ccodelike'
查找真实性就是从:
关注业务的真实性,进行逆查.
凭证表->发票表->发货单 即为gl_accvouch----->
salebillvouch------->
dispatchlist
查找完整性就是从:
发货单->发票表->凭证表 即为dispatchlist---->
salebillvouch------>
gl_accvouch
审计人员检查销售发票所列商品的品名、数量、金额与发货单中所列商品的品名、数量、金额是否一致。
分析:
全连接fulljoin。
在不确定两个集合的关系时,可以使用全连接。
包含了两个集合的所有元素。
通常会将同一张发票、发货单的主子表连接起来。
按品名等分组。
在左连接、右连接、全连接时,如
where条件需要作比较判断时,需用isnull函数确定数据的准确性、完整性。
select*from(
selecta.cSBVCode,cInvCode,SUM(b.iQuantity)sl,SUM(iNatSum)je
fromSaleBillVouchajoinSaleBillVouchsbona.SBVID=b.SBVID
groupbya.cSBVCode,cInvCode)a
fulljoin
(selecta.cSBVCode,a.cdlcode,cInvCode,SUM(b.iQuantity)sl,SUM(iNatSum)je
fromDispatchListajoinDispatchListsbona.DLID=b.DLID
groupbya.cSBVCode,a.cdlcode,cInvCode)b
ona.cSBVCode=b.cSBVCode