假设我有余额2000,并希望选择余额为
balance=balance-Cr+Dr
所以我的余额栏会给出如下价值。
balance DR Cr
40000 0 60000
100000 60000 0
0 0 100000
在SQL查询中这怎么可能?
请检查像我这样的类似问题 enter link description here
答案 0 :(得分:4)
这是一个递归CTE,它使用前一行的余额计算余额。您需要一些定义行顺序的东西。我使用示例表中的ID列。
-- Test table
declare @T table
(
ID int identity primary key,
DR int,
Cr int
)
-- Sample data
insert into @T (DR, Cr)
select 0, 60000 union all
select 60000, 0 union all
select 0, 100000
-- In value
declare @StartBalance int
set @StartBalance = 100000
-- Recursive cte calculating balance as a running sum
;with cte as
(
select
T.ID,
@StartBalance - T.Cr + T.DR as Balance,
T.DR,
T.Cr
from @T as T
where T.ID = 1
union all
select
T.ID,
C.Balance - T.Cr + T.DR as Balance,
T.DR,
T.Cr
from cte as C
inner join @T as T
on C.ID+1 = T.ID
)
select Balance, DR, Cr
from cte
option (maxrecursion 0)
结果:
Balance DR Cr
----------- ----------- -----------
40000 0 60000
100000 60000 0
0 0 100000
答案 1 :(得分:1)
这应该有效:
SELECT (T.BALANCE-T.CR+T.DR) as "Balance", T.DR, T.CR
FROM <table-name> T
答案 2 :(得分:1)
如果您使用Oracle,则会有一个名为LAG
的函数来访问上一行数据:http://www.adp-gmbh.ch/ora/sql/analytical/lag.html
如果您阅读此链接,我想您会发现这正是您所需要的。但只有你使用Oracle ..