关于MS SQL 用两个字段的计算结果作为新字段的值

我有一个表,表名“收支明细”,里面有两个字段:收入,支出 (收入、支出两个字段都允许有NULL值),我想用这两个字段计算出“余额”字段。

原始表及示例数据如下图所示:

我想达到的效果如下图所示:

请问各位大神,这个 select 语句该怎么写?对不住大家了,我只有20分。
我用的是ms sql 2000 纠正第二张图片上的一个错误:余额字段第二条记录中的500应该为1500.

需要用到两个技巧,

1、对null的处理可以使用isnull(值,0)的方式来处理,


比如:


select isnull(收入,0)   当收入为null时将计为0


2、用自定义函数处理,可能更简单


3、以下是写的整个测试实现

--1、创建测试表,有序列的ID是很重要的。
create table InOutDetail(inmoney money ,outmoney money,id int identity   )

go 
--2、插入测试数据
insert into InOutDetail(InMoney )
values(1000)
insert into InOutDetail(InMoney )
values(500)
insert into InOutDetail(outMoney )
values(600)
insert into InOutDetail(outMoney )
values(800)
insert into InOutDetail(InMoney )
values(2000)
insert into InOutDetail(outMoney )
values(300)

Go
--3、检查表中的数据
select * from InOutDetail

GO
--4、创建值函数
Create function fn_GetSum(@id int)
returns money  
as
begin
    declare  @sum money
    select  @sum=sum(isnull(inmoney,0)) -sum(isnull(outmoney,0))  
           from InOutDetail
    where id<=@id
    return @sum
end 

GO
--5、检测结果,以后直接调用函数就可以得出结果
select inmoney,OutMoney ,dbo.fn_GetSum(id) as 余额 from InOutDetail


Go
--6、删除测试数据
drop function fn_GetSum
drop table InOutDetail

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-01

下面的测试表.

你可以把  Add_val   理解为  收入,   Sub_Val   理解为支出


CREATE TABLE test_AddSub (
  year     INT,
  Sub_Val  INT,
  Add_val  INT
);


INSERT INTO test_AddSub VALUES(2000, 0,  1000);
INSERT INTO test_AddSub VALUES(2001, 0,  2000);
INSERT INTO test_AddSub VALUES(2002, 0,  3000);
INSERT INTO test_AddSub VALUES(2003, 0,  4000);
INSERT INTO test_AddSub VALUES(2004, 1000,  0);
INSERT INTO test_AddSub VALUES(2005, 2000,  0);
INSERT INTO test_AddSub VALUES(2006, 3000,  0);
INSERT INTO test_AddSub VALUES(2007, 4000,  0);

SELECT
  year, Sub_Val, Add_val,  
  (SELECT SUM(Add_val - Sub_Val) FROM test_AddSub  t2  WHERE t2.year <= test_AddSub.year) AS Result
FROM
  test_AddSub;
GO

year        Sub_Val     Add_val     Result
----------- ----------- ----------- -----------
2000           0        1000        1000
2001           0        2000        3000
2002           0        3000        6000
2003           0        4000       10000
2004        1000           0        9000
2005        2000           0        7000
2006        3000           0        4000
2007        4000           0           0

(8 行受影响)

第2个回答  2013-06-30
select 收入,支出,收入-支出as余额from你的表
我是初学者 不知道写错没 你试试吧