优化版存货对总账查询语句

易飞本身各种功能相对薄弱,本身软件偏重于操作型。各种报表及对账功能很少,运维人员会做各种自定义的查询进行异常数据核对抓取。说实话易飞应该是限制于本身架构、开发语言、产品结构,更新不动了,慢慢应该已经是抛弃了,属于偏轻量化企业使用。本身软件限制颇多,功能单一,不稳定,特别是数据库层面,劝解各位维持现状少动数据库。但是鼎捷本身这个软件前台功能太low逼着运维人员去动数据库,走了一个极端。出了问题前台根本找不到下手的地方。

废话不多说,以下是鼎捷那边月结存货对账语句:

优化说明:

(1)操作简便:直接复制以下SQL语句到查询分析器里使用;

(2)改动面少:只需对会计科目编号、年月做更改,即红色字段是需要做更改的部分;

(3)缩短时间:减少因寻找差异单据而耗费在几个excel表中核对的时间;

(4)简化操作:无需在前台导太多的报表来寻找差异,只需后台执行以下语句即可。

使用说明:

(1)适用于长期对账,基本设置都没有问题,单据都抛分录和凭证的客户;

(2)适用于已有一定查账经验的人员使用;

(3)关于查暂估部分,目前只分析进货暂估,委外暂估暂未考虑;

(4)建议查询语句时最好分开单独执行,以免混乱。

**********************************************************************

第一步:先在易飞中跑库存明细表或进耗存统计表和科目余额表来确定总差异

**********************************************************************

**********************************************************************

第二步:执行以下SQL语句来统计出存货、分录和总账的数据,以确定差异信息

说明:@ACCOUNT表示要查的会计科目,@MONTH表示要查的年月

**********************************************************************

declare @ACCOUNT char(20) set @ACCOUNT='1403'

DECLARE @MONTH CHAR(6) SELECT  @MONTH = '201205'

SELECT 单别,SUM(ISNULL(INV本期发生额,0)) AS INV本期发生额,SUM(ISNULL(AJS本期发生额,0)) AS AJS本期发生额,

sum(INV本期发生额-AJS本期发生额) as 抛分录差额 from(

--INV本期发生额

SELECT LA006 as 单别, SUM(LA013*LA005)as INV本期发生额, 0 as AJS本期发生额   FROM INVLA

INNER JOIN INVMB ON MB001=LA001 INNER JOIN

CMSMC ON MC001=LA009 LEFT JOIN INVMA ON MA002=MB005 WHERE SUBSTRING(LA004,1,6)=@MONTH

AND MA004 =@ACCOUNT AND MC004=1

GROUP BY LA006

union all

--AJS当期发生额

SELECT TB013 AS 单别,0 as INV本期发生额, SUM(TB007*TB004)as AJS本期发生额 FROM AJSTA

INNER JOIN AJSTB ON TA001=TB001 AND TA002=TB002

WHERE SUBSTRING(TA006,1,6)=@MONTH AND TB005 =@ACCOUNT

GROUP BY TB013) AS F

group BY 单别

--having sum(INV本期发生额-AJS本期发生额) <>0

order BY 单别

--ACT当期发生额

SELECT TA006 as 凭证来源码,SUM(TB007*TB004)as ACT本期发生额 FROM ACTTA INNER JOIN ACTTB ON TA001=TB001 AND TA002=TB002

WHERE SUBSTRING(ACTTA.TA003,1,6)=@MONTH AND ACTTA.TA010 = 'Y' AND ACTTB.TB005 =@ACCOUNT GROUP BY TA006

**********************************************************************

第三步:执行INV-AJS差异明细确定具体哪些单别单号的INVLA和分录不一致

说明:@ACCOUNT表示要查的会计科目,@MONTH表示要查的年月,

@DanBie表示要查明细的具体单别

**********************************************************************

declare @ACCOUNT char(20) set @ACCOUNT='1403'

DECLARE @MONTH CHAR(6) SELECT  @MONTH = '201205'

DECLARE @DanBie CHAR(6) SELECT  @DanBie =('1101')

SELECT 单别单号,SUM(ISNULL(INV本期发生额,0)) AS INV本期发生额,SUM(ISNULL(AJS本期发生额,0)) AS AJS本期发生额,

sum(INV本期发生额-AJS本期发生额) as 抛分录差额 from(

--INV本期发生额

SELECT LA006+'-'+LA007 AS 单别单号, SUM(LA013*LA005)as INV本期发生额, 0 as AJS本期发生额   FROM INVLA

INNER JOIN INVMB ON MB001=LA001 INNER JOIN

CMSMC ON MC001=LA009 LEFT JOIN INVMA ON MA002=MB005 WHERE SUBSTRING(LA004,1,6)=@MONTH

AND MA004 =@ACCOUNT AND MC004=1 AND LA006=@DanBie

GROUP BY LA006,LA007

union all

--AJS当期发生额

SELECT TB013+'-'+TB014 AS 单别单号,0 as INV本期发生额, SUM(TB007*TB004)as AJS本期发生额 FROM AJSTA

INNER JOIN AJSTB ON TA001=TB001 AND TA002=TB002

WHERE SUBSTRING(TA006,1,6)=@MONTH AND TB005 =@ACCOUNT AND TB013=@DanBie

GROUP BY TB013,TB014) AS F

group BY 单别单号

having sum(INV本期发生额-AJS本期发生额)<>0

order BY 单别单号

**********************************************************************

第四步:执行AJS-ACT差异明细确定具体哪些单别单号的分录和凭证不一致

说明:@ACCOUNT表示要查的会计科目,@MONTH表示要查的年月,

**********************************************************************

declare @ACCOUNT char(20) set @ACCOUNT='1403'

DECLARE @MONTH CHAR(6) SELECT  @MONTH = '201205'

SELECT 单别,单号,来源单别单号,SUM(ISNULL(ACT本期发生额,0))as 凭证发生额,SUM(ISNULL(AJS本期发生额,0)) as 分录发生额,SUM(ISNULL((ACT本期发生额-AJS本期发生额),0)) as 抛凭证差异 FROM (

SELECT TA004 as 单别,TA005 AS 单号,TB013+'-'+TB014 AS 来源单别单号,0 as ACT本期发生额, SUM(TB007*TB004)as AJS本期发生额 FROM AJSTA

INNER JOIN AJSTB ON TA001=TB001 AND TA002=TB002

WHERE SUBSTRING(TA006,1,6)=@MONTH AND TB005=@ACCOUNT

GROUP BY TA004,TA005,TB013+'-'+TB014

UNION ALL

SELECT TA001 AS 单别,TA002 as 单号,TA006 as 来源单别单号,SUM(TB007*TB004)as ACT本期发生额,0 as AJS本期发生额

FROM ACTTA INNER JOIN ACTTB ON TA001=TB001 AND TA002=TB002

WHERE ACTTA.TA010 = 'Y' AND ACTTB.TB005=@ACCOUNT and SUBSTRING(ACTTA.TA003,1,6)=@MONTH

GROUP BY TA001,TA002,TA006

)AS PZYC

GROUP BY 单别,单号,来源单别单号

having SUM(ISNULL((ACT本期发生额-AJS本期发生额),0))<>0

order by 单别,单号,来源单别单号

**********************************************************************

第五步:查暂估部分,以下分月初回冲和单到回冲来确定具体哪些单据暂估错了

说明:@ACCOUNT表示要查的会计科目,@MONTH表示要查的年月,

@OLDMONTH表示要查的上个月份

**********************************************************************

--月初回冲:恒等式:本月暂估-上月暂估+本月采购发票=本月进货+本月价差

如若单据对不上可将HAVING前加‘---’注释掉查询全部暂估数据

declare @ACCOUNT char(20) set @ACCOUNT='1403'

DECLARE @MONTH CHAR(6) SELECT  @MONTH ='201205'

DECLARE @OLDMONTH CHAR(6) SELECT @OLDMONTH='201204'

select 进货单号, sum(ISNULL(本月进货,0)) AS 本月进货,SUM(ISNULL(价差,0)) AS 价差,SUM(ISNULL(本月发票,0)) as 发票金额,

SUM(ISNULL(本月暂估,0)) as 本月暂估, SUM(isnull(上月暂估,0)) AS 上月暂估,

sum(ISNULL(本月暂估,0)-ISNULL(上月暂估,0)+ISNULL(本月发票,0)-ISNULL(本月进货,0)-ISNULL(价差,0))AS 差额 from(

--本月进货

SELECT LA006+'-'+LA007 AS 进货单号,SUM(LA013*LA005) AS 本月进货,0 AS 价差,0 AS 本月发票,

0 AS 本月暂估,0 as  上月暂估 FROM INVLA

INNER JOIN INVMB ON MB001=LA001

INNER JOIN CMSMC ON MC001=LA009

LEFT JOIN INVMA ON MA002=MB005

LEFT JOIN CMSMQ ON LA006=MQ001

WHERE SUBSTRING(LA004,1,6)=@MONTH AND MA004=@ACCOUNT AND

MC004=1 AND MA001='1' AND MQ003 in ('34','35')

GROUP BY LA006,LA007

UNION ALL

--价差

SELECT TB005+'-'+TB006 as 进货单号,0 AS 本月进货, sum(ISNULL(TB055,0))as 价差,

0 as 本月发票,0 AS 本月暂估,0 as  上月暂估  FROM ACPTB

LEFT JOIN ACPTA  ON TB001=TA001  AND TB002=TA002

INNER JOIN INVMB ON MB001=TB037

LEFT JOIN INVMA ON MA002=MB005

WHERE SUBSTRING(TA003,1,6)=@MONTH AND TB056 <>'' AND TA024='Y'AND MA004=@ACCOUNT

group BY TB005,TB006

union all

--本月发票

SELECT TB005+'-'+TB006 as 进货单号,0 AS 本月进货, 0 as 价差,

case when TA079='1'THEN SUM(ISNULL(TB017*1,0))ELSE SUM(ISNULL(TB017*-1,0)) END '本月发票',0 AS 本月暂估,0 as  上月暂估  FROM ACPTB

LEFT JOIN ACPTA  ON TB001=TA001  AND TB002=TA002

INNER JOIN INVMB ON MB001=TB037

LEFT JOIN INVMA ON MA002=MB005

WHERE SUBSTRING(TA003,1,6)=@MONTH  AND TA024='Y'AND MA004=@ACCOUNT

group BY TB005,TB006,TA079

union all

--本月暂估

SELECT TQ010+'-'+TQ011 as 进货单号,0 AS 本月进货, 0 as 价差,0 as 本月发票,sum(TQ025)as 本月暂估,0 as  上月暂估

FROM ACPTQ AS ZG INNER JOIN INVMB ON MB001=TQ007

INNER JOIN CMSMC ON MC001=TQ017

LEFT JOIN INVMA ON MA002=MB005

LEFT JOIN ACPTP ON TQ001=TP001 AND TQ002=TP002

LEFT JOIN CMSMQ ON TQ010=MQ001

WHERE TP004=@MONTH AND MA004=@ACCOUNT AND MC004=1 AND MA001='1' and TP007='Y' AND MQ003 in ('34','35')

group BY TQ010,TQ011

union all

--上月暂估

SELECT TQ010+'-'+TQ011 as 进货单号,0 AS 本月进货, 0 as 价差,0 as 本月发票,0 as 本月暂估,SUM(TQ025) AS 上月暂估

FROM ACPTQ AS ZG INNER JOIN INVMB ON MB001=TQ007

INNER JOIN CMSMC ON MC001=TQ017

LEFT JOIN INVMA ON MA002=MB005

LEFT JOIN ACPTP ON TQ001=TP001 AND TQ002=TP002

LEFT JOIN CMSMQ ON TQ010=MQ001

WHERE TP004=@OLDMONTH AND MA004=@ACCOUNT AND MC004=1 AND MA001='1' and TP007='Y' AND MQ003 in ('34','35')

group BY TQ010,TQ011

)as F

group BY 进货单号

--HAVING(sum(ISNULL(本月暂估,0)-ISNULL(上月暂估,0)+ISNULL(本月发票,0)-ISNULL(本月进货,0)-ISNULL(价差,0)))<>0

order BY 进货单号

**********************************************************************

--单到回冲:恒等式:本月暂估+本月发票=本月进货+进货价差

declare @ACCOUNT char(20) set @ACCOUNT='1403'

DECLARE @MONTH CHAR(6) SELECT  @MONTH ='201205'

select 进货单号, sum(ISNULL(本月进货,0)) AS 本月进货,SUM(ISNULL(价差,0)) AS 价差,SUM(ISNULL(本月发票,0)) as 发票金额,

SUM(ISNULL(本月暂估,0)) as 本月暂估,

sum(ISNULL(本月暂估,0)+ISNULL(本月发票,0)-ISNULL(本月进货,0)-ISNULL(价差,0))AS 差额 from(

--本月进货

SELECT LA006+'-'+LA007 AS 进货单号,SUM(LA013*LA005) AS 本月进货,0 AS 价差,0 AS 本月发票,

0 AS 本月暂估,0 as  前月暂估 FROM INVLA

INNER JOIN INVMB ON MB001=LA001

INNER JOIN CMSMC ON MC001=LA009

LEFT JOIN INVMA ON MA002=MB005

LEFT JOIN CMSMQ ON LA006=MQ001

WHERE SUBSTRING(LA004,1,6)=@MONTH AND MA004 =@ACCOUNT AND

MC004=1 AND MA001='1' AND MQ003 in ('34','35')

GROUP BY LA006,LA007

UNION ALL

--价差

SELECT TB005+'-'+TB006 as 进货单号,0 AS 本月进货, sum(ISNULL(TB055,0))as 价差,

0 as 本月发票,0 AS 本月暂估,0 as  前月暂估  FROM ACPTB

LEFT JOIN ACPTA  ON TB001=TA001  AND TB002=TA002

INNER JOIN INVMB ON MB001=TB037

LEFT JOIN INVMA ON MA002=MB005

WHERE SUBSTRING(TA003,1,6)=@MONTH  AND TA024='Y'AND MA004 =@ACCOUNT

group BY TB005,TB006

union all

--本月发票

SELECT TB005+'-'+TB006 as 进货单号,0 AS 本月进货, 0 as 价差,

case when SUBSTRING(TB008,1,6)<SUBSTRING(TA003,1,6)THEN SUM(ISNULL(TB055,0))ELSE SUM(ISNULL(TB017*1,0)) END '本月发票',0 AS 本月暂估,0 as  前月暂估  FROM ACPTB

LEFT JOIN ACPTA  ON TB001=TA001  AND TB002=TA002

INNER JOIN INVMB ON MB001=TB037

LEFT JOIN INVMA ON MA002=MB005

WHERE SUBSTRING(TA003,1,6)=@MONTH  AND TA024='Y'AND MA004 =@ACCOUNT

group BY TB005,TB006,TA079,SUBSTRING(TB008,1,6),SUBSTRING(TA003,1,6)

union all

--本月暂估

SELECT TQ010+'-'+TQ011 as 进货单号,0 AS 本月进货, 0 as 价差,0 as 本月发票,sum(TQ025)as 本月暂估,0 as  前月暂估

FROM ACPTQ AS ZG INNER JOIN INVMB ON MB001=TQ007

INNER JOIN CMSMC ON MC001=TQ017

LEFT JOIN INVMA ON MA002=MB005

LEFT JOIN ACPTP ON TQ001=TP001 AND TQ002=TP002

LEFT JOIN CMSMQ ON TQ010=MQ001

WHERE TP004=@MONTH AND MA004 =@ACCOUNT AND MC004=1 AND MA001='1' and TP007='Y' AND MQ003 in ('34','35')

group BY TQ010,TQ011

)as F

group BY 进货单号

--HAVING sum(ISNULL(本月暂估,0)+ISNULL(本月发票,0)-ISNULL(本月进货,0)-ISNULL(价差,0))<>0

order BY 进货单号

存货对总账查询语句(优化版)相关推荐

  1. php面试专题---MYSQL查询语句优化

    php面试专题---MYSQL查询语句优化 一.总结 一句话总结: mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存) ...

  2. 30种MySQL查询语句优化方法分享

    30种MySQL查询语句优化方法分享,对于MySQL查询语句来说效率是最重要的能用一分钟搞定的绝不能花费两分钟.今天整理了30种MySQL查询语句优化方法,供大家学习使用. 30种MySQL查询语句优 ...

  3. oracle 数据语句优化,oracle 查询语句优化录

    最近,因为发现以前使用的数据查询语句的效率越来越差,导致每次进行大量数据的操作都需要耗一个小时以上.这速度实在是太龟慢了,简直是无法忍受了.本人决定亲自拿把杀猪刀砍向它,好给它颜色瞧瞧.经过一系列的测 ...

  4. sql优化常用的几种方法_MySQL常用30种SQL查询语句优化方法

    作者:小小程序员 链接:https://zhuanlan.zhihu.com/p/64731487 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1.应尽量避免在 ...

  5. MYSQL查询语句优化

    mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存)等等.这里的记录的优化技巧更适用于开发人员,都是从网络上收集和自己整 ...

  6. Mysql常用30种SQL查询语句优化方法

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...

  7. mysql 索引查询_mysql索引的建立和查询语句优化

    首先表内容展示: # 300W条的模拟数据 # 并且没有建立任何索引 不建立索引的查询时间: 以id查询的(4秒多): 以email查询的(4秒多): 建立主键索引后: alter table s1 ...

  8. MySQL 常用30种SQL查询语句优化方法

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描.2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及 ...

  9. 常用30种MySQL查询语句优化方法

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...

最新文章

  1. “编程能力差,90%的人会输在这点上!”谷歌开发:其实都是在瞎努力
  2. 博客园电子月刊[第一期]
  3. java 科学计数_Java和甜蜜的科学
  4. [react] 说说你喜欢react的原因是什么?它有什么优缺点?
  5. EclipsePHP Studio 2008快捷方式
  6. Python MySqlDB 增删改数据库(转载)
  7. integer 最大值_JAVA源码之Integer
  8. PIC18F26K20
  9. 编码原理(附一)--算术编码
  10. 【数据库】sql连表查询
  11. 几种调用WebService的方法
  12. 【上交OJ】1002:二哥种花生(二维前缀和+二维差分---模版题)
  13. linux 光盘本地yum源,小凡带你搭建本地的光盘yum源
  14. ISO 9001质量管理体系标准概述
  15. vue 二级三级路由配置
  16. 经典论文-SqueezeNet论文及实践
  17. 清除新版Google Chrome浏览器中表单控件(input,button...)默认的黑色边框
  18. Kali渗透测试(四)——无线网络WPA攻击(PSK破解、AIROLIB、JTR、cowpatty、pyrit)
  19. java-通信-ip-1
  20. 关于AHB-RAM的一些内容1

热门文章

  1. 高仿it之家新闻客户端源码
  2. Windows7 库 文件夹图标修改(转载)
  3. section 5: 字体
  4. 「重磅」2020下半年中国移动互联网大报告
  5. 唐拉雅秀握何优势 敢为中国酒店国际化先锋?
  6. 【OpenSea 创始人访谈录】听OpenSea 创始人谈 NFT 市场爆炸式增长的秘密
  7. Effective C++ 条款20_宁以 pass-by-reference-to-const 替换 pass-by-value_不止于此
  8. qq软件下载2015正式版免费版v6.8官方版
  9. 学习如何编码的最佳Android应用
  10. 借鉴:软考高项备考考试心得,来自一名学员的总结,非常全