22,300
社区成员




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
;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.发生日期