declare @a table(序号 int,日期 datetime,金额 money)
insert @a values(4,'2009-9-30',5000)
insert @a values(5,'2009-9-30',5000)
insert @a values(6,'2009-9-30',5000)
insert @a values(1,'2009-10-30',2000)
insert @a values(2,'2009-10-30',1000)
insert @a values(3,'2009-10-30',5000)
select 序号,日期,金额,累计=(select sum(金额) from @a a where a.日期<=b.日期 and a.序号<=b.序号) from @a b order by 日期,序号--我想第一个主要按日期排序如日期相同再按序号排序,但为什么不对呢!有高手帮我解决下吗! 能说下为什么并帮我改改!谢谢了!
insert @a values(4,'2009-9-30',5000)
insert @a values(5,'2009-9-30',5000)
insert @a values(6,'2009-9-30',5000)
insert @a values(1,'2009-10-30',2000)
insert @a values(2,'2009-10-30',1000)
insert @a values(3,'2009-10-30',5000)
select 序号,日期,金额,累计=(select sum(金额) from @a a where a.日期<=b.日期 and a.序号<=b.序号) from @a b order by 日期,序号--我想第一个主要按日期排序如日期相同再按序号排序,但为什么不对呢!有高手帮我解决下吗! 能说下为什么并帮我改改!谢谢了!
insert @a values(4,'2009-9-30',5000)
insert @a values(5,'2009-9-30',5000)
insert @a values(6,'2009-9-30',5000)
insert @a values(1,'2009-10-30',2000)
insert @a values(2,'2009-10-30',1000)
insert @a values(3,'2009-10-30',5000)
select 序号,日期,金额,累计=(select sum(金额) from @a a where a.日期<=b.日期 and a.序号<=b.序号) from @a b order by 日期,序号--我想第一个主要按日期排序如日期相同再按序号排序,但为什么不对呢!有高手帮我解决下吗! 能说下为什么并帮我改改!谢谢了!
我想要的结果如下:
4 2009-9-30 5000 5000
5 2009-9-30 5000 10000
6 2009-9-30 5000 15000
1 2009-10-30 2000 17000
2 2009-10-30 1000 18000
3 2009-10-30 2000 20000
declare @a table(序号 int,日期 datetime,金额 money)
insert @a values(4,'2009-9-30',5000)
insert @a values(5,'2009-9-30',5000)
insert @a values(6,'2009-9-30',5000)
insert @a values(1,'2009-10-30',2000)
insert @a values(2,'2009-10-30',1000)
insert @a values(3,'2009-10-30',5000)
select 序号,日期,金额,累计=(select sum(金额) from @a a where a.日期 <=b.日期 and a.序号 <=b.序号) from @a b order by 日期,序号
/*
(1 行受影响)(1 行受影响)(1 行受影响)(1 行受影响)(1 行受影响)(1 行受影响)
序号 日期 金额 累计
----------- ----------------------- --------------------- ---------------------
4 2009-09-30 00:00:00.000 5000.00 5000.00
5 2009-09-30 00:00:00.000 5000.00 10000.00
6 2009-09-30 00:00:00.000 5000.00 15000.00
1 2009-10-30 00:00:00.000 2000.00 2000.00
2 2009-10-30 00:00:00.000 1000.00 3000.00
3 2009-10-30 00:00:00.000 5000.00 8000.00(6 行受影响)*/
序号,日期,金额,
累计=(select sum(金额) from @a a where a.日期 <b.日期 or a.日期=b.日期 and a.序号 <=b.序号)
from
@a b
order by
日期,序号
declare @a table(序号 int,日期 datetime,金额 money) insert @a values(4,'2009-9-30',5000)
insert @a values(5,'2009-9-30',5000)
insert @a values(6,'2009-9-30',5000)
insert @a values(1,'2009-10-30',2000)
insert @a values(2,'2009-10-30',1000)
insert @a values(3,'2009-10-30',5000) select 序号,日期,金额,累计=(select sum(金额) from @a a where a.日期 <=b.日期 and a.序号 <=b.序号) from @a b order by 日期,序号
序号 日期 金额 累计
----------- ----------------------- --------------------- ---------------------
4 2009-09-30 00:00:00.000 5000.00 5000.00
5 2009-09-30 00:00:00.000 5000.00 10000.00
6 2009-09-30 00:00:00.000 5000.00 15000.00
1 2009-10-30 00:00:00.000 2000.00 2000.00
2 2009-10-30 00:00:00.000 1000.00 3000.00
3 2009-10-30 00:00:00.000 5000.00 8000.00(6 行受影响)哪里不对
insert @a values(4,'2009-9-30',5000)
insert @a values(5,'2009-9-30',5000)
insert @a values(6,'2009-9-30',5000)
insert @a values(1,'2009-10-30',2000)
insert @a values(2,'2009-10-30',1000)
insert @a values(3,'2009-10-30',5000) select
序号,日期,金额,
累计=(select sum(金额) from @a a where a.日期 <b.日期 or a.日期=b.日期 and a.序号 <=b.序号)
from
@a b
order by
日期,序号
/*
(序号 日期 金额 累计
----------- ----------------------- --------------------- ---------------------
4 2009-09-30 00:00:00.000 5000.00 5000.00
5 2009-09-30 00:00:00.000 5000.00 10000.00
6 2009-09-30 00:00:00.000 5000.00 15000.00
1 2009-10-30 00:00:00.000 2000.00 17000.00
2 2009-10-30 00:00:00.000 1000.00 18000.00
3 2009-10-30 00:00:00.000 5000.00 23000.00(6 行受影响)*/
insert @a values(4,'2009-9-30',5000)
insert @a values(5,'2009-9-30',5000)
insert @a values(6,'2009-9-30',5000)
insert @a values(1,'2009-10-30',2000)
insert @a values(2,'2009-10-30',1000)
insert @a values(3,'2009-10-30',5000)
select 序号,日期,金额,累计=(select sum(金额) from @a a where a.日期<b.日期 or (a.日期=b.日期 and a.序号 <=b.序号)) from @a b order by 日期,序号 /*
序号 日期 金额 累计
----------- ------------------------------------------------------ --------------------- ---------------------
4 2009-09-30 00:00:00.000 5000.0000 5000.0000
5 2009-09-30 00:00:00.000 5000.0000 10000.0000
6 2009-09-30 00:00:00.000 5000.0000 15000.0000
1 2009-10-30 00:00:00.000 2000.0000 17000.0000
2 2009-10-30 00:00:00.000 1000.0000 18000.0000
3 2009-10-30 00:00:00.000 5000.0000 23000.0000(所影响的行数为 6 行)*/
insert @a values(3,'2009-10-30',5000) 所以结果是:
3 2009-10-30 00:00:00.000 5000.0000 23000.0000不是你说的:
3 2009-10-30 00:00:00.000 5000.0000 20000.0000
如果日期相同,再比较序号:(a.日期=b.日期 and a.序号 <=b.序号)
declare @a table(序号 int,日期 datetime,金额 money) insert @a values(4,'2009-9-30',5000)
insert @a values(5,'2009-9-30',5000)
insert @a values(6,'2009-9-30',5000)
insert @a values(1,'2009-10-30',2000)
insert @a values(2,'2009-10-30',1000)
insert @a values(3,'2009-10-30',5000) select 序号,日期,金额,
累计=(select sum(金额) from @a a where (a.日期 <b.日期) or ( a.日期 =b.日期 and a.序号 <=b.序号))
from @a b order by 日期,序号 序号 日期 金额 累计
----------- ----------------------- --------------------- ---------------------
4 2009-09-30 00:00:00.000 5000.00 5000.00
5 2009-09-30 00:00:00.000 5000.00 10000.00
6 2009-09-30 00:00:00.000 5000.00 15000.00
1 2009-10-30 00:00:00.000 2000.00 17000.00
2 2009-10-30 00:00:00.000 1000.00 18000.00
3 2009-10-30 00:00:00.000 5000.00 23000.00(6 行受影响)
序号,日期,金额,
累计=(select sum(金额) from @a a where a.日期 <b.日期 or a.日期=b.日期 and a.序号 <=b.序号)
from
@a b
order by
日期,序号 select 序号,日期,金额,累计=(select sum(金额) from @a a where a.日期<b.日期 or (a.日期=b.日期 and a.序号 <=b.序号)) from @a b order by 日期,序号
这两种写法那种效率高一些呢?还是一样的?
第二种最好写成:
(a.日期 <b.日期) or (a.日期=b.日期 and a.序号 <=b.序号)