ID Color Size InQty OutQty
1 123 红色 X 20 10
2 123 黑色 X 20 12
3 123 红色 X 20 14
4 123 黑色 X 20 15
5 123 红色 X 20 2
6 123 黑色 X 20 8
7 123 红色 X 20 22
8 123 红色 X 20 19
如上表,想要的结果是,从第一行开始,InQty-OutQty 然后加上第二行的InQty - 第二行的OutQty
一直这样运算下去,加多一列显示每一行的计算结果
请问SQL语句如何写?思路是怎样的。
------解决思路----------------------
CREATE TABLE #temp (ID int,Color int,[SIZE] VARCHAR(50),InQty INT,OutQty INT)
INSERT #temp
SELECT 1,123,'红色 X 20',10,0 UNION ALL
SELECT 2,123,'黑色 X 20',12,0 UNION ALL
SELECT 3,123,'红色 X 20',14,0 UNION ALL
SELECT 4,123,'黑色 X 20',15,0 UNION ALL
SELECT 5,123,'红色 X 20',2,0 UNION ALL
SELECT 6,123,'黑色 X 20',8,0 UNION ALL
SELECT 7,123,'红色 X 20',22,0 UNION ALL
SELECT 8,123,'红色 X 20',19,0
SELECT a.*,(SELECT SUM(inqty-outqty) FROM #temp WHERE id<=a.id) endqty
FROM #temp a
------解决思路----------------------
drop table #temp
CREATE TABLE #temp (ID int,Color int,[SIZE] VARCHAR(20),InQty INT,OutQty INT)
INSERT #temp
SELECT 1,123,'红色 X 20',10,0 UNION ALL
SELECT 2,123,'黑色 X 20',12,0 UNION ALL
SELECT 3,123,'红色 X 20',14,0 UNION ALL
SELECT 4,123,'黑色 X 20',15,0 UNION ALL
SELECT 5,123,'红色 X 20',2,0 UNION ALL
SELECT 6,123,'黑色 X 20',8,0 UNION ALL
SELECT 7,123,'红色 X 20',22,0 UNION ALL
SELECT 8,123,'红色 X 20',19,0
go
-- 上个回复加错列了,换成这个。
with m as
(
select a.* , a.InQty as sumQty from #temp a where ID = 1
union all
select a.* , a.InQty + m.sumQty from m , #temp a where a.ID = m.ID + 1
)
select * from m
(8 行受影响)
ID Color SIZE InQty OutQty sumQty
----------- ----------- -------------------- ----------- ----------- -----------
1 123 红色 X 20 10 0 10
2 123 黑色 X 20 12 0 22
3 123 红色 X 20 14 0 36
4 123 黑色 X 20 15 0 51
5 123 红色 X 20 2 0 53
6 123 黑色 X 20 8 0 61
7 123 红色 X 20 22 0 83
8 123 红色 X 20 19 0 102