大牛们,求一个流水汇总的sql语句

低代码开发平台 2021-04-02 08:43:48
已知一个物料明细进出表如下,每个物料都有颜色,单位,仓库区分,最开始的时候,期初库存为0,求每天每个物料的进出汇总如下数据:
CREATE TABLE #tempDetail(单据类型 VARCHAR(20),仓库 VARCHAR(20)  ,
批号 VARCHAR(20),单位 VARCHAR(20) ,颜色尺码 VARCHAR(20),物料代码 VARCHAR(20) ,物料名称 VARCHAR(20) ,
发生日期 Date,入库数量 decimal,出库数量 decimal)
INSERT INTO #tempDetail values('成品入库','原料仓','','PCS','红色','03000001','电源','2021-03-01',1000,0)
INSERT INTO #tempDetail values('成品入库','成品仓','','PCS','白色','03000001','电源','2021-03-01',500,0)
INSERT INTO #tempDetail values('内部领料','原料仓','','PCS','红色','03000001','电源','2021-03-02',0,10)
INSERT INTO #tempDetail values('内部领料','成品仓','','PCS','白色','03000001','电源','2021-03-02',0,30)

INSERT INTO #tempDetail values('销售出库单','原料仓','','PCS','红色','03000001','电源','2021-03-03',0,40)
INSERT INTO #tempDetail values('销售出库单','原料仓','','PCS','红色','03000001','电源','2021-03-04',0,50)

select * from #tempDetail
求下面结果
单据类型 仓库 批号 单位 颜色尺码 物料代码 物料名称 发生日期 期初数量 入库数量 出库数量 结存数量
成品入库 原料仓 PCS 红色 03000001 电源 2021-03-01 0 1000 0 1000
成品入库 成品仓 PCS 白色 03000001 电源 2021-03-01 0 500 0 500
内部领料 原料仓 PCS 红色 03000001 电源 2021-03-02 1000 0 10 990
内部领料 成品仓 PCS 白色 03000001 电源 2021-03-02 500 0 30 470
销售出库单 原料仓 PCS 红色 03000001 电源 2021-03-03 990 0 40 950
销售出库单 原料仓 PCS 红色 03000001 电源 2021-03-04 470 0 50 420
...全文
179 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hello World, 2021-04-03
  • 打赏
  • 举报
回复

;WITH list AS (SELECT   *, ROW_NUMBER() OVER (PARTITION BY 仓库, 颜色尺码, 物料代码 ORDER BY 发生日期) seq FROM   #tempDetail),
      result AS (SELECT list.单据类型,
                        list.仓库,
                        list.批号,
                        list.单位,
                        list.颜色尺码,
                        list.物料代码,
                        list.物料名称,
                        list.发生日期,
                        CAST(0 AS DECIMAL) AS 初期数量,
                        list.入库数量,
                        list.出库数量,
                        CAST(list.入库数量 - list.出库数量 AS DECIMAL) 结存数量,
                        list.seq
                 FROM   list
                 WHERE  seq = 1
                 UNION ALL
                 SELECT b.单据类型,
                        b.仓库,
                        b.批号,
                        b.单位,
                        b.颜色尺码,
                        b.物料代码,
                        b.物料名称,
                        b.发生日期,
                        a.结存数量,
                        b.入库数量,
                        b.出库数量,
                        CAST(a.结存数量 + b.入库数量 - b.出库数量 AS DECIMAL),
                        b.seq
                 FROM   list b
                        INNER JOIN result a ON a.仓库 = b.仓库 AND  a.颜色尺码 = b.颜色尺码 AND a.物料代码 = b.物料代码
                 WHERE  a.seq + 1 = b.seq)
SELECT  * FROM  result ORDER BY result.物料代码, result.发生日期

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧