在select语句中执行算术运算

时间:2011-05-19 11:16:06

标签: tsql sql-server-2005

假设我有余额2000,并希望选择余额为

balance=balance-Cr+Dr

所以我的余额栏会给出如下价值。

balance        DR            Cr
40000          0             60000  
100000         60000         0
0              0             100000

在SQL查询中这怎么可能?

请检查像我这样的类似问题 enter link description here

3 个答案:

答案 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 ..