有如下表
存入日期 取款日期 取款金额 存钱银行卡号 存入金额 取款银行卡号
null 2006-6-2 2 null null 4367111111111111111
null 2006-6-3 3 null null 4367111111111111111
null 2006-6-4 4 null null 4367111111111111111
2006-4-1 2006-6-1 1 4367111111111111111 400 4367111111111111111
2006-6-2 null null 4367111111111111111 200 null
2006-6-3 null null 4392222222222222 56 null
2006-6-4 null null 4392222222222222 67 null
2006-6-5 null null 4392222222222222 5 null
如何得到视图
存入日期 取款日期 取款金额 存钱银行卡号 存入金额 取款银行卡号 剩余金额
null 2006-6-2 2 null null 4367111111111111111 397
null 2006-6-3 3 null null 4367111111111111111 394
null 2006-6-4 4 null null 4367111111111111111 390
2006-4-1 2006-6-1 1 4367111111111111111 400 4367111111111111111 399
2006-6-2 null null 4367111111111111111 200 null 590
2006-6-3 null null 4392222222222222 56 null 56
2006-6-4 null null 4392222222222222 67 null 123
2006-6-5 null null 4392222222222222 5 null 128
存入日期 取款日期 取款金额 存钱银行卡号 存入金额 取款银行卡号
null 2006-6-2 2 null null 4367111111111111111
null 2006-6-3 3 null null 4367111111111111111
null 2006-6-4 4 null null 4367111111111111111
2006-4-1 2006-6-1 1 4367111111111111111 400 4367111111111111111
2006-6-2 null null 4367111111111111111 200 null
2006-6-3 null null 4392222222222222 56 null
2006-6-4 null null 4392222222222222 67 null
2006-6-5 null null 4392222222222222 5 null
如何得到视图
存入日期 取款日期 取款金额 存钱银行卡号 存入金额 取款银行卡号 剩余金额
null 2006-6-2 2 null null 4367111111111111111 397
null 2006-6-3 3 null null 4367111111111111111 394
null 2006-6-4 4 null null 4367111111111111111 390
2006-4-1 2006-6-1 1 4367111111111111111 400 4367111111111111111 399
2006-6-2 null null 4367111111111111111 200 null 590
2006-6-3 null null 4392222222222222 56 null 56
2006-6-4 null null 4392222222222222 67 null 123
2006-6-5 null null 4392222222222222 5 null 128
*,
(Select SUM(IsNull(存入金额,0)-IsNull(取款金额,0)) From TableName A Where IsNull(存入日期,取款日期)<= IsNull(A.存入日期,A.取款日期)) As 剩余金额
From TableName A
null 2006-6-3 3 null null 4367111111111111111 394
null 2006-6-4 4 null null 4367111111111111111 390
2006-4-1 2006-6-1 1 4367111111111111111 400 4367111111111111111 399
2006-6-2 null null 4367111111111111111 200 null 590这个我怎么觉得不对啊
4367111111111111111卡在6月2日帐户余额到底还有多少?
create table cash
(
存入日期 varchar(10),
取款日期 varchar(10),
取款金额 money,
存钱银行卡号 varchar(19),
存入金额 money,
取款银行卡号 varchar(19)
)insert into cash
select null,'2006-6-2',2,null,null,'4367111111111111111'
union
select null,'2006-6-3',3,null,null,'4367111111111111111'
union
select null,'2006-6-4',4,null,null,'4367111111111111111'
union
select '2006-4-1','2006-6-1',1,'4367111111111111111',400,'4367111111111111111'
union
select '2006-6-2',null,null,'4367111111111111111',200,'4367111111111111111'
union
select '2006-6-3',null,null,'4392222222222222',56,null
union
select '2006-6-4',null,null,'4392222222222222',57,null
union
select '2006-6-5',null,null,'4392222222222222',5,nullSelect
*,
(Select SUM(IsNull(存入金额,0)-IsNull(取款金额,0))
From cash
Where IsNull(存入日期,取款日期)<= IsNull(A.存入日期,A.取款日期)
and isnull(存钱银行卡号,取款银行卡号)=isnull(A.存钱银行卡号,A.取款银行卡号)
group by Isnull(存钱银行卡号,取款银行卡号)) As 剩余金额
From cash a存入日期 取款日期 取款金额 存钱银行卡号 存入金额 取款银行卡号 剩余金额
---------- ---------- --------------------- ------------------- --------------------- ------------------- ---------------------
NULL 2006-6-2 2.0000 NULL NULL 4367111111111111111 597.0000
NULL 2006-6-3 3.0000 NULL NULL 4367111111111111111 594.0000
NULL 2006-6-4 4.0000 NULL NULL 4367111111111111111 590.0000
2006-4-1 2006-6-1 1.0000 4367111111111111111 400.0000 4367111111111111111 399.0000
2006-6-2 NULL NULL 4367111111111111111 200.0000 4367111111111111111 597.0000
2006-6-3 NULL NULL 4392222222222222 56.0000 NULL 56.0000
2006-6-4 NULL NULL 4392222222222222 57.0000 NULL 113.0000
2006-6-5 NULL NULL 4392222222222222 5.0000 NULL 118.0000
6-1号存了400,取了1,是399
6-2号只取了2就是399-2=397----------------------------------
二号又存了200进去,余额应该是5百多才对0_0
Create Table TEST
(存入日期 Varchar(10),
取款日期 Varchar(10),
取款金额 Int,
存钱银行卡号 Char(19),
存入金额 Int,
取款银行卡号 Char(19))
--插入數據
Insert TEST Select null, '2006-6-2', 2, null, null, '4367111111111111111'
Union All Select null, '2006-6-3', 3, null, null, '4367111111111111111'
Union All Select null, '2006-6-4', 4, null, null, '4367111111111111111'
Union All Select '2006-4-1', '2006-6-1', 1, '4367111111111111111',400, '4367111111111111111'
Union All Select '2006-6-2', null, null, '4367111111111111111',200, null
Union All Select '2006-6-3', null, null, '4392222222222222', 56, null
Union All Select '2006-6-4', null, null, '4392222222222222', 67, null
Union All Select '2006-6-5', null, null, '4392222222222222', 5, null
GO
--測試
Select
*,
(Select SUM(IsNull(存入金额,0))-SUM(IsNull(取款金额,0)) From TEST Where IsNull(存钱银行卡号,取款银行卡号)=IsNull(A.存钱银行卡号,A.取款银行卡号) And IsNull(存入日期,取款日期)<= IsNull(A.存入日期,A.取款日期)) As 剩余金额
From TEST A
GO
--刪除測試環境
Drop Table TEST
GO
--結果
/*
存入金额 取款日期 取款金额 存钱银行卡号 存入金额 取款银行卡号 剩余金额
NULL 2006-6-2 2 NULL NULL 4367111111111111111 597
NULL 2006-6-3 3 NULL NULL 4367111111111111111 594
NULL 2006-6-4 4 NULL NULL 4367111111111111111 590
2006-4-1 2006-6-1 1 4367111111111111111 400 4367111111111111111 399
2006-6-2 NULL NULL 4367111111111111111 200 NULL 597
2006-6-3 NULL NULL 4392222222222222 56 NULL 56
2006-6-4 NULL NULL 4392222222222222 67 NULL 123
2006-6-5 NULL NULL 4392222222222222 5 NULL 128
*/
6-1号存了400,取了1,是399
6-2号只取了2就是399-2=397----------------------------------
二号又存了200进去,余额应该是5百多才对0_0
6-1号存了400,取了1,是399
6-2号只取了2就是399-2=397----------------------------------
二号又存了200进去,余额应该是5百多才对0_0
你对了,应该是5百多