在Sbo中通过单据事务日志进行物料的期初、期末、出入库综合分析

  一个非常有用的Sbo业务查询分析,利用Sbo单据事务日志表OINM,对指定期间的物料的期初、期末、入库、出库以及特殊类型的出库入库--在此我们分析了采购入库和采购退货两种特殊的业务类型--进行了">统计分析。

  当然可以进行扩展,进而加上一些分析条件,比如对指定的仓库、指定的物料类型、排除指定的物料等条件进行约束。以下语句在某合作单位的生产环境上测试通过,并用于其生产分析。

_declare @dt1 smalldatetime, @dt2 smalldatetime, @ItemCode nvarchar(20)  _select @dt1=t0.docDate FROM OINM t0 WHERE t0.createDate=[%0]_select @dt2=t1.docDate FROM OINM t1 WHERE t1.createDate=[%1]_select @ItemCode=t2.ItemCode from OITM t2 where t2.ItemCode = '[%2]'  _select tc.ItmsGrpNam N'物料组名称',tc.ItmsGrpCod N'物料组',ta.itemcode N'物料号',tb.ItemName N'物料名称',sum(ta.begqty) N'期初数量',sum(ta.begtotal) N'期初金额', sum(Buyqty) N'采购入库数量',sum(Buytotal) N'采购入库金额',sum(Retqty) N'采购退货数量',sum(Rettotal) N'采购退货金额',sum(inqty) N'库存收货数量',sum(intotal) N'库存收货金额',sum(outqty) N'库存发货数量',sum(outtotal) N'库存发货金额',sum(endqty) N'期未数量',sum(endtotal) N'期未余额'from (_select ItemCode,sum(begqty) begqty,sum(begtotal) begtotal,sum(inqty)inqty,sum(intotal)intotal,sum(outqty) outqty,sum(outtotal) outtotal,sum(endqty) endqty,sum(endtotal) endtotal, sum(BuyQty) BuyQty, sum(BuyTotal) BuyTotal, sum(RetQty) RetQty, sum(RetTotal) RetTotal FROM (   _select a.ItemCode,sum(IsNull(IsNull(a.InQty,0),0)-IsNull(IsNull(a.OutQty,0),0)) begqty,sum(a.TransValue) begtotal,0 inqty,0 intotal,0 outqty,0 outtotal,0 endqty,0 endtotal, 0 BuyQty, 0 BuyTotal, 0 RetQty, 0 RetTotal    from oinm a  where (a.ItemCode=@ItemCode or IsNull(@ItemCode,'')='') and a.CreateDate < IsNull(@dt1, cast('2001-1-1' as smalldatetime))    group by a.ItemCode   union all   _select a.ItemCode,0,0,sum(IsNull(a.InQty,0)),sum(case when a.TransValue>=0 then a.TransValue else 0 end),sum(IsNull(a.OutQty,0)),sum(case when a.TransValue<0 then a.TransValue else 0 end),0,0,0,0,0,0    from oinm a  where (a.ItemCode=@ItemCode or IsNull(@ItemCode,'')='') and a.CreateDate between IsNull(@dt1, cast('2001-1-1' as smalldatetime)) and IsNull(@dt2,getdate()) And a.TransType not in ('20','21')    group by a.ItemCode   union all   _select a.ItemCode,0,0,0,0,0,0,sum(IsNull(IsNull(a.InQty,0),0)-IsNull(IsNull(a.OutQty,0),0)),sum(a.TransValue),0,0,0,0    from oinm a  where (a.ItemCode=@ItemCode or IsNull(@ItemCode,'')='') and a.CreateDate<=IsNull(@dt2,getdate())    group by a.ItemCode   union all   _select a.ItemCode,0,0,0,0,0,0,0,0,sum(IsNull(IsNull(a.InQty,0),0)-IsNull(IsNull(a.OutQty,0),0)),sum(a.TransValue),0,0    from oinm a  where (a.ItemCode=@ItemCode or IsNull(@ItemCode,'')='') and a.CreateDate between IsNull(@dt1, cast('2001-1-1' as smalldatetime)) and IsNull(@dt2,getdate()) and a.TransType='20'    group by a.ItemCode   union all   _select a.ItemCode,0,0,0,0,0,0,0,0,0,0,sum(IsNull(IsNull(a.InQty,0),0)-IsNull(IsNull(a.OutQty,0),0)),sum(a.TransValue)    from oinm a  where (a.ItemCode=@ItemCode or IsNull(@ItemCode,'')='') and a.CreateDate between IsNull(@dt1, cast('2001-1-1' as smalldatetime)) and IsNull(@dt2,getdate()) and a.TransType='21'    group by a.ItemCode ) tmp group by ItemCode) ta inner
join oitm tb on ta.itemcode = tb.ItemCode inner join oitb tc on tb.ItmsGrpCod = tc.ItmsGrpCodgroup by tc.ItmsGrpNam, tc.ItmsGrpCod, ta.itemcode, tb.ItemName

  本文出自 “富盛软件” 博客,请务必保留此出处http://foresun.blog.51cto.com/221037/104533

时间: 2024-09-08 09:51:08

在Sbo中通过单据事务日志进行物料的期初、期末、出入库综合分析的相关文章

如何防止SQL Server数据库的事务日志异常增长

server|数据|数据库 当事务日志扩展到无法接受的限度时您必须执行的步骤.事务日志的扩展会导致 Microsoft SQL Server 数据库无法使用. 在 SQL Server 2000 中,每个数据库都至少包含一个数据文件和一个事务日志文件.SQL Server 2000 在该数据文件中以物理方式存储数据.事务日志文件存储您对 SQL Server 数据库执行的所有修改的详细信息,以及执行每个修改的事务的详细信息.由于事务完整性被视为 SQL Server 的一个基本而固有的特点,因此

通过事务日志解决SQL Server常见四大故障(一)

同Oracle数据库一样,SQL Server数据库中也有事务日志.事务日志主要用来记录所有事务以及每个事务对数据库进行了哪些更改.事务日志可以说是数据库中最重要的数据文件之一. 当系统出现故障时,只要存在数据日志那么就可以利用它来恢复数据解决数据库故障.作为SQL Server数据库管理员,了解数据日志文件的作用,以及如何利用它来解决一些数据库的常见故障,这非常重要.既然事务日志这么重要,那么他到底可以用来做什么事情呢?口说无凭,笔者这里就跟大家说说事务日志到底可以用来解决什么故障. 故障一:

分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据

原文:分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据 分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据 今天开发找我,说数据库insert不进数据,叫我看一下 他发了一个截图给我 然后我登录上服务器,发现了可疑的地方,而且这个数据库之前有一段经历 在月初的时候这个数据库曾经置疑过,启动不起来 Could not redo log record (163041:116859:5), for transaction ID (0:-1175226963), on

SQLServer数据库中开启CDC导致事务日志空间被占满的原因

SQLServer中开启CDC之后,在某些情况下会导致事务日志空间被占满的现象为: 在执行增删改语句(产生事务日志)的过程中提示,The transaction log for database '***' is full due to 'REPLICATION'(数据库"***"的事务日志已满,原因为"REPLICATION"). CDC以及复制的基本原理粗略地讲,对于日志的使用步骤如下: 1,每当基础表(开启了CDC或者replication的表)产生事务性操作

SQL Server中事务日志已满的原因以及解决办法

  错误描述:数据库的事务日志已满.若要查明无法重用日志中的空间的原因 ,请参阅sys.databases 中的 log_reuse_wait_desc 列 .   首先引入一下事务日志的概念(来自百度百科):   事务日志是一个与数据库文件分开的文件.它存储对数据库进行的所有更改,并全部记录插入.更新.删除.提交.回退和数据库模式变化.事务日志还称作前滚日志或重做日志.   事务日志是备份和恢复的重要组件,也是使用 SQL Remote 或 [复制代理] 复制数据所必需的.   在缺省情况下,

收缩事务日志

SQLSERVER收缩事务日志 一.由于系统中录入及删除数据频繁,故事务日志很大. SQLSERVER中讲: BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志. 但我在数据库中进行上述操作后,事务日志还是没有改变. 二.只有进行"数据库收缩"操作. 在此复选框中打勾  选中上图所示选项,即可点"确定",执行收缩事务日志的操作,硬盘经过一段时间的工作后,SQLSERVER终于提示收缩成功.事务日志文件被恢复到原始尺寸.

事务日志被填满的原因是什么?

SQL Server事务日志可能会被填满,这会阻止之后的数据库操作,包括UPDATE, DELETE, INSERT 和CHECKPOINT.事务日志填满会导致1105错误: Can't allocate space for object syslogs in database dbname becausethe logsegment is full. If you ran out of space in syslogs, dumpthe transaction log. Otherwise u

SQL Server误区:有关大容量事务日志恢复模式的误区

误区 #28:有关大容量事务日志恢复模式的几个误区 28 a)常见的DML操作可以被"最小记录日志" 不是.在大容量事务日志恢复模式下只有一小部分批量操作可以被"最小记录日志",这类操作的列表可以在Operations That Can Be Minimally Logged找到.这是适合SQL Server 2008的列表,对于不同的SQL Server版本,请确保查看正确的列表. 28 b)使用大容量事务日志恢复模式不会影响灾难恢复 首先,在上次事务日志备份之后

DB2崩溃后用事务日志恢复的原理和技巧

在系统崩溃之后,使用DB2的事务日志恢复数据库. 您曾多少次碰到过错误消息"SQL0946C The transaction log for the database is full?" 在尽力解决该问题时,您是否停下来思考如下两个问题:1. 为何存在事务日志:2. 事务日志记录服务的目的是什么呢? 若没有事务,多个用户和应用程序同时与一个数据库进行交互时就必然会破坏数据.而如果没有事务日志记录,DB2 UDB中的一些据库恢复方法就不会存在. 如果您还没有完全理解这些概念,也不必担忧.