
我想把上圖中的余額在SQL中用陳述句直接寫成出來
其中余額欄位是查詢表時增加的欄位,其它欄位都是直接取的值
計算方式是:O2=O1+M2+N2
O3=O2+M3+N3
后面以此類推
當第一行沒有上期余額這部分怎么處理?
如果寫函式要怎么寫?
如果不用寫函式要如何寫?
uj5u.com熱心網友回復:
with data(_index, add_amount, red_amount) as(
select 1, 0, -3080 union all
select 2, 3003, 0 union all
select 3, 0, -154 union all
select 4, 77, 0 union all
select 5, 0, 40 union all
select 6, 0, -1580 union all
select 7, 1540, 0
)
--select * from data
select data.*, rest = (select sum(add_amount) + sum(red_amount) from data data2 where data2._index <= data._index)
from data
話說,你這個記數方法也不太合理阿,怎么在一列中有正,有負?如果負數表示相反意思,建議另建一列
uj5u.com熱心網友回復:
有正有負其實不是很重要,我增加列與減少列是按加法算的,所以沒有什么影響uj5u.com熱心網友回復:
可以把增加金額跟減少金額合并為一行,然后再進行sum(入出)得到你想要的余額uj5u.com熱心網友回復:
用遞回with data, 只能計算100層,直接用遞回只能32層;實際上都不能解決實際問題。
還有一個問題,像你這種問題,最好直接把資料以文本的方式貼 出來,大家才能去幫你嘗試,否則因為資料大多,沒有人愿意幫你去打那么多資料以方便測驗了。
uj5u.com熱心網友回復:
方法有二,用游標,或用交叉表uj5u.com熱心網友回復:
把M ,N ,O資料貼出來
uj5u.com熱心網友回復:
有序號就按序號累計即可,沒有序號就加一個序號DECLARE @t TABLE(序號 INT NOT NULL, 增加 DECIMAL(10,2) NOT NULL, 減少 DECIMAL(10,2) NOT NULL)
INSERT @t(序號, 增加, 減少)
VALUES(1,40557,-9736),(2,61185,-89882),(3,90955,-59306),
(4,65656,-79207),(5,22674,-21292),(6,84536,-72462),
(7,72849,-68889),(8,58352,-42120),(9,38306,-55301),
(10,7283,-27803),(11,80728,-34710),(12,58263,-82854),
(13,32959,-85673),(14,51437,-93619),(15,38617,-96284)
;WITH t AS (SELECT *, CONVERT(DECIMAL(10, 2), 增加 + 減少) 余額 FROM @t WHERE 序號 = 1
UNION ALL
SELECT t2.*,
CONVERT(DECIMAL(10, 2), t2.增加 + t2.減少 + t.余額)
FROM @t t2
INNER JOIN t ON t2.序號 = t.序號 + 1)
SELECT * FROM t;
uj5u.com熱心網友回復:
用游標處理就比較簡單,只是速度不是很快轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/11393.html
標籤:疑難問題
下一篇:mysql 一直提示ERROR 1067: Invalid default value for 'product_id',請問如何解決?
