--结存表
CREATE TABLE Stocks(Item varchar(10),Period int,Balance int)
INSERT Stocks SELECT 'aa',200501,100
UNION  ALL    SELECT 'cc',200501,100

--明细账数据
CREATE TABLE tb(
ID int IDENTITY PRIMARY KEY,
Item varchar(10),  --产品编号
Quantity int,      --交易数量
Flag bit,          --交易标志,1代表入库,0代表出库,这样可以有效区分退货(负数)
Date datetime)     --交易日期
INSERT tb SELECT 'aa',100,1,'2005-1-1'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'aa',55 ,0,'2005-2-1'
UNION ALL SELECT 'aa',-10,1,'2005-2-2'
UNION ALL SELECT 'aa',-5 ,0,'2005-2-3'
UNION ALL SELECT 'aa',200,1,'2005-2-2'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'bb',95 ,1,'2005-2-2'
UNION ALL SELECT 'bb',65 ,0,'2005-2-3'
UNION ALL SELECT 'bb',-15,1,'2005-2-5'
UNION ALL SELECT 'bb',-20,0,'2005-2-5'
UNION ALL SELECT 'bb',100,1,'2005-2-7'
UNION ALL SELECT 'cc',100,1,'2005-1-7'
GO

--查询时间段定义
DECLARE @dt1 datetime,@dt2 datetime
SELECT @dt1='2005-2-2',@dt2='2005-2-10'

--查询
--期初库存年月及计算期初数的开始时间)
DECLARE @Period int,@dt datetime
SELECT @Period=CONVERT(CHAR(6),DATEADD(Month,-1,@dt1),112),
    @dt=DATEADD(Day,1-Day(@dt1),@dt1)

--查询期初库存
SELECT Item=ISNULL(a.Item,b.Item),
    Date=ISNULL(b.Date,CONVERT(char(10),@dt1,120)),
    Opening=ISNULL(a.Balance,0)+ISNULL(b.Opening,0),
    [IN]=ISNULL(b.[IN],0),
    [IN_Retrun]=ISNULL(b.[IN_Retrun],0),
    [OUT]=ISNULL(b.[OUT],0),
    [OUT_Return]=ISNULL(b.[OUT_Return],0),
    Balance=ISNULL(a.Balance,0)+ISNULL(b.Opening,0)+ISNULL(b.Amount,0)
FROM(
    --期初数
    SELECT Item,Balance FROM Stocks WHERE Period=@Period
)a FULL JOIN(
    --统计时间段内无发生额的数据(如果这个不是查询需要的,去掉这段查询)
    SELECT Item,
        Date=CONVERT(char(10),@dt1,120),    
        Opening=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END),
        [IN]=0,
        [IN_Retrun]=0,
        [OUT]=0,
        [OUT_Return]=0,
        Amount=0
    FROM tb a
    WHERE Date>=@dt AND Date<@dt1
        AND NOT EXISTS(
            SELECT * FROM tb WHERE Item=a.Item AND Date>@dt1 AND Date<DATEADD(Day,1,@dt2))
    GROUP BY Item
    UNION ALL
    --指定时间段内有交易发生的数据
    SELECT Item,
        Date=CONVERT(char(10),Date,120),    
        Opening=(SELECT SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
            FROM tb WHERE Item=a.Item AND Date>=@dt AND Date<MIN(a.Date)),
        [IN]=SUM(CASE WHEN Flag=1 AND Quantity>0 THEN Quantity END),
        [IN_Retrun]=SUM(CASE WHEN Flag=1 AND Quantity<0 THEN -Quantity END),
        [OUT]=SUM(CASE WHEN Flag=0 AND Quantity>0 THEN Quantity END),
        [OUT_Return]=SUM(CASE WHEN Flag=0 AND Quantity<0 THEN -Quantity END),
        Amount=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
    FROM tb a
    WHERE Date>=@dt1 AND Date<DATEADD(Day,1,@dt2)
    GROUP BY CONVERT(char(10),Date,120),Item
)b ON a.Item=b.Item
ORDER BY Item,Date
/*--结果
Item    Date       Opening    IN     IN_Retrun   OUT   OUT_Return   Balance
---------- ---------------- -------------- ----------- ---------------- ----------- ------------------- -----------
aa     2005-02-02   225      200     10          0       0            415
aa     2005-02-03   415      0       0           0       5            420
bb     2005-02-02   0        95      0           0       0            95
bb     2005-02-03   95       0       0           65      0            30
bb     2005-02-05   30       0       15          0       20           35
bb     2005-02-07   35       100     0           0       0            135
cc     2005-02-01   100       0      0           0       0            100
--*/

转载于:https://www.cnblogs.com/shihao/archive/2012/06/02/2531877.html

库存明细帐处理示例(包含结存数).sql相关推荐

  1. 想找合适的仓库库存管理系统?不妨先来百数免费试用体验吧

    仓储管理在整个物流供应链环节中,有着承上启下的作用,所以,仓储管理水平的高低,将直接影响着上下游的业务.传统的纸质化管理弊病明显,越来越多的企业更倾向选择配套仓储管理系统,借助数字化的方式提升管理水平 ...

  2. 库存台帐报表存储过程

    库存台帐报表存储过程,包含While语句,两次循环,原理很简单,但是提供了两次循环的操作方法.   1 -- ----------------------------------   2 -- 用途: ...

  3. FlatList使用示例包含RefreshControl

    FlatList使用示例包含RefreshControl FlatList属性介绍 RefreshControl属性介绍 代码 FlatList属性介绍 ItemSeparatorComponent: ...

  4. 进阶指令——wc指令【作用:统计文件内容信息(包含行数、单词数、字节数)】、date指令【作用:表示操作时间日期(读取、设置)】、cal指令【作用:用来操作日历的】、clear/ctrl + L指令

    6.wc指令 作用:统计文件内容信息(包含行数.单词数.字节数) 语法:#wc -l                wc 需要统计的文件路径 -l:表示lines,行数 -w:表示words,单词数 ...

  5. Bapi-BAPI_GOODSMVT_CREATE【该物料不可能有库存记帐】

    在调用Bapi:BAPI_GOODSMVT_CREATE的时候提示[该物料不可能有库存记帐]. MB01采购收货无价值入库的物料,网上搜了一下大概都是说要点库存价值更新啥的,简直蛋疼,本来就是无价值的 ...

  6. 学校计算机总帐和明细帐的表格,总账与明细账

    2009-05-03 我想请教一下,总分类账和总账是一样的吗,明细账和分类明细账是一样的吗?如果有实物图那就最好了,谢谢哦! 总帐.总分类明细帐都是必须记的. 1.总帐是总分类账的简称.总帐记帐是根据 ...

  7. [2019蓝桥杯国赛B组c++][最优包含][排列数][解谜游戏][第八大奇迹]

    个人题解链接,蓝桥杯历届试题,正在更新中~ 文章目录 个人题解链接,蓝桥杯历届试题,正在更新中~ 一个大佬写了填空题的答案,点击下面链接 最优包含 排列数 解谜游戏 第八大奇迹 一个大佬写了填空题的答 ...

  8. 采购入库单记帐后在明细帐等不显示

    问题现象: 2008年7月7日单据号0000000034号采购入库单已做正常单据记帐,但是,在明细帐.流水帐.汇总表等表里均找不到,在恢复单据记帐里也找不到.     原因分析: 先备份数据,然后在查 ...

  9. 每一个合格的家庭主妇都是生产厂长的有力竞争者——ERP库存管理pandas代码示例(面试题)

    欢迎关注,敬请点赞! 每一个合格的家庭主妇都是生产厂长的有力竞争者--ERP简介及代码示例 ERP简介 ERP小故事 ERP库存管理简单代码示例 导入数据 按销量排序的索引列表 分配库存量 最终结果 ...

  10. mysql驱动不支持批处理_ADO.NET 中可以发送包含多个SQL语句的批处理脚本到SQL Server,但是用MySQL的ODBC驱动不行...

    众所周知,我们在ADO.NET中可以使用NuGet包System.Data.SqlClient来操作SQL Server,并且ADO.NET是支持向SQL Server发送包含多个SQL语句的批处理脚 ...

最新文章

  1. 简述java的线程_JAVA线程简述
  2. 爬虫笔记(一)——快速使用urllib库
  3. python 微信发送图片失败什么原因_[已解决] Appium-Python 测试聊天时同时发送 9 张图片的问题...
  4. php限制小程序访问,PHP投票小程序,防超时,防IP限制
  5. neo4j数据浏览器_Neo4j:在Neo4j浏览器的帮助下探索新数据集
  6. 计算机c语言二级题型,计算机二级C语言题型和评分标准
  7. 【转】TCP和UDP的区别
  8. python3-matplotlib绘制散点图、绘制条形图
  9. 工厂电子产品工艺文件_建智能工厂,人机如何达到最佳组合?
  10. 祖龙娱乐2021年亏损3.03亿元 同比收窄60%
  11. linux磁盘相关命令
  12. 使用eclipse调试hive mapreduce
  13. 解决Linux下使用QQ的问题
  14. 【Matlab土壤分类】多类SVM土壤分类【含GUI源码 1398期】
  15. 【ENVI遥感影像分类】 监督、非监督分类
  16. MySQL索引失效、优化的方法
  17. 【IC】低功耗设计理论知识
  18. 扫码关注公众号登陆网站
  19. C语言网络编程实战之线上五子棋游戏(二)
  20. 【Linux】特别篇--GTK界面设计

热门文章

  1. itellyou操作系统,office等软件的很全的下载站
  2. 如何用 TensorFlow 让一切看起来更美?
  3. Mac OS中显示及隐藏文件和文件夹的方法
  4. 创建Qsys_PIO IP核
  5. 华为U8500在USB调试模式下LOGCAT无打印信息的解决方法
  6. 适合普通人的基金投资研究工具之:且慢与基金组合
  7. 只要你的学校榜上有名,BAT大厂随便进!!(2021年QS世界大学排名)
  8. python数列的平方_python数组平方
  9. Elasticsearch:InteliJ Elasticsearch plugin 集成
  10. 淘宝上大量贩卖微信号,这些人买这么多微信号目的是