22,210
社区成员
发帖
与我相关
我的任务
分享
WITH t AS (
SELECT 1 AS rowid,377 AS id,0 AS IN_qty, 0 AS out,201 AS INIT_qty UNION ALL
SELECT 2 AS rowid,376 AS id,0 AS IN_qty, 0 AS out,312 AS IN_qtyit UNION ALL
SELECT 3 AS rowid,376 AS id,0 AS IN_qty, 16 AS out,0 AS IN_qtyit UNION ALL
SELECT 4 AS rowid,375 AS id,0 AS IN_qty, 0 AS out,-25 AS IN_qtyit UNION ALL
SELECT 5 AS rowid,298 AS id,0 AS IN_qty, 0 AS out,-12 AS IN_qtyit UNION ALL
SELECT 6 AS rowid,302 AS id,0 AS IN_qty, 0 AS out,-40 AS IN_qtyit UNION ALL
SELECT 7 AS rowid,303 AS id,0 AS IN_qty, 0 AS out,205 AS IN_qtyit UNION ALL
SELECT 8 AS rowid,305 AS id,0 AS IN_qty, 0 AS out,-48 AS IN_qtyit UNION ALL
SELECT 9 AS rowid,307 AS id,0 AS IN_qty, 0 AS out,-11 AS IN_qtyit UNION ALL
SELECT 10 AS rowid,308 AS id,0 AS IN_qty, 0 AS out,-7 AS IN_qtyit UNION ALL
SELECT 11 AS rowid,309 AS id,0 AS IN_qty, 0 AS out,987 AS IN_qtyit UNION ALL
SELECT 12 AS rowid,309 AS id,0 AS IN_qty, 2 AS out,0 AS IN_qtyit UNION ALL
SELECT 13 AS rowid,309 AS id,0 AS IN_qty, 11 AS out,0 AS IN_qtyit UNION ALL
SELECT 14 AS rowid,309 AS id,0 AS IN_qty, 4 AS out,0 AS IN_qtyit UNION ALL
SELECT 15 AS rowid,312 AS id,0 AS IN_qty, 0 AS out,-1 AS IN_qtyit UNION ALL
SELECT 16 AS rowid,316 AS id,0 AS IN_qty, 0 AS out,7898 AS IN_qtyit UNION ALL
SELECT 17 AS rowid,316 AS id,0 AS IN_qty, 98 AS out,0 AS IN_qtyit UNION ALL
SELECT 18 AS rowid,316 AS id,0 AS IN_qty, 164 AS out,0 AS IN_qtyit UNION ALL
SELECT 19 AS rowid,316 AS id,0 AS IN_qty, 280 AS out,0 AS IN_qtyit UNION ALL
SELECT 20 AS rowid,316 AS id,0 AS IN_qty, 167 AS out,0 AS IN_qtyit UNION ALL
SELECT 21 AS rowid,316 AS id,0 AS IN_qty, 6 AS out,0 AS IN_qtyit UNION ALL
SELECT 22 AS rowid,316 AS id,0 AS IN_qty, 108 AS out,0 AS IN_qtyit UNION ALL
SELECT 23 AS rowid,316 AS id,0 AS IN_qty, 84 AS out,0 AS IN_qtyit UNION ALL
SELECT 24 AS rowid,316 AS id,637 AS IN_qty, 0 AS out,0 AS IN_qtyit UNION ALL
SELECT 25 AS rowid,316 AS id,182 AS IN_qty, 0 AS out,0 AS IN_qtyit UNION ALL
SELECT 26 AS rowid,316 AS id,0 AS IN_qty, 9 AS out,0 AS IN_qtyit
)
,t1 AS (
SELECT *,rnkid=ROW_NUMBER()OVER(partition BY id ORDER BY rowid ASC) FROM t
)
,t2 AS (
SELECT *,t1.INIT_qty+in_qty-out AS balance FROM t1
WHERE rnkid=1
UNION ALL
SELECT t1.*,t2.balance+t1.INIT_qty+t1.in_qty-t1.out FROM t2 ,t1
WHERE t2.id=t1.id
AND t2.rnkid+1=t1.rnkid
)
SELECT rowid,id,in_qty,out,init_qty,balance FROM t2
ORDER BY 1
第二个是计算对于每一行计算所有id相同 rowid比他小的行的3列值
WITH t AS (
SELECT 1 AS rowid,377 AS id,0 AS IN_qty, 0 AS out,201 AS INIT_qty UNION ALL
SELECT 2 AS rowid,376 AS id,0 AS IN_qty, 0 AS out,312 AS IN_qtyit UNION ALL
SELECT 3 AS rowid,376 AS id,0 AS IN_qty, 16 AS out,0 AS IN_qtyit UNION ALL
SELECT 4 AS rowid,375 AS id,0 AS IN_qty, 0 AS out,-25 AS IN_qtyit UNION ALL
SELECT 5 AS rowid,298 AS id,0 AS IN_qty, 0 AS out,-12 AS IN_qtyit UNION ALL
SELECT 6 AS rowid,302 AS id,0 AS IN_qty, 0 AS out,-40 AS IN_qtyit UNION ALL
SELECT 7 AS rowid,303 AS id,0 AS IN_qty, 0 AS out,205 AS IN_qtyit UNION ALL
SELECT 8 AS rowid,305 AS id,0 AS IN_qty, 0 AS out,-48 AS IN_qtyit UNION ALL
SELECT 9 AS rowid,307 AS id,0 AS IN_qty, 0 AS out,-11 AS IN_qtyit UNION ALL
SELECT 10 AS rowid,308 AS id,0 AS IN_qty, 0 AS out,-7 AS IN_qtyit UNION ALL
SELECT 11 AS rowid,309 AS id,0 AS IN_qty, 0 AS out,987 AS IN_qtyit UNION ALL
SELECT 12 AS rowid,309 AS id,0 AS IN_qty, 2 AS out,0 AS IN_qtyit UNION ALL
SELECT 13 AS rowid,309 AS id,0 AS IN_qty, 11 AS out,0 AS IN_qtyit UNION ALL
SELECT 14 AS rowid,309 AS id,0 AS IN_qty, 4 AS out,0 AS IN_qtyit UNION ALL
SELECT 15 AS rowid,312 AS id,0 AS IN_qty, 0 AS out,-1 AS IN_qtyit UNION ALL
SELECT 16 AS rowid,316 AS id,0 AS IN_qty, 0 AS out,7898 AS IN_qtyit UNION ALL
SELECT 17 AS rowid,316 AS id,0 AS IN_qty, 98 AS out,0 AS IN_qtyit UNION ALL
SELECT 18 AS rowid,316 AS id,0 AS IN_qty, 164 AS out,0 AS IN_qtyit UNION ALL
SELECT 19 AS rowid,316 AS id,0 AS IN_qty, 280 AS out,0 AS IN_qtyit UNION ALL
SELECT 20 AS rowid,316 AS id,0 AS IN_qty, 167 AS out,0 AS IN_qtyit UNION ALL
SELECT 21 AS rowid,316 AS id,0 AS IN_qty, 6 AS out,0 AS IN_qtyit UNION ALL
SELECT 22 AS rowid,316 AS id,0 AS IN_qty, 108 AS out,0 AS IN_qtyit UNION ALL
SELECT 23 AS rowid,316 AS id,0 AS IN_qty, 84 AS out,0 AS IN_qtyit UNION ALL
SELECT 24 AS rowid,316 AS id,637 AS IN_qty, 0 AS out,0 AS IN_qtyit UNION ALL
SELECT 25 AS rowid,316 AS id,182 AS IN_qty, 0 AS out,0 AS IN_qtyit UNION ALL
SELECT 26 AS rowid,316 AS id,0 AS IN_qty, 9 AS out,0 AS IN_qtyit
)
SELECT *,
(SELECT SUM(init_qty+in_qty-out) FROM t b
WHERE a.id=b.ID
AND b.rowid<=a.rowid) AS balance FROM t a