高分求SQL语句

sillyboyl 2010-05-22 04:27:57
哪位高手帮忙解决一下下面的SQL语句

已知有下表tb1
列1 列2
----------
a 1
b 4
c 12
d 6
... ...

要得出下表tb2结果
列1 列2(累加值)
------------
a 1
b 5
c 17
d 23
... ...

即tb2的"列2"第N行的值等于tb1"列2"前N-1行各项累加和
...全文
57 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2010-05-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sillyboyl 的回复:]
呵呵
thinclient: 就是这样子,按日期从小到大排列,且不重复
问题解决,谢谢
[/Quote]
我在4楼早提示你需要个顺序了,我用的是ID.
sillyboyl 2010-05-22
  • 打赏
  • 举报
回复
呵呵
thinclient: 就是这样子,按日期从小到大排列,且不重复
问题解决,谢谢
zhengduan964532 2010-05-22
  • 打赏
  • 举报
回复

IF object_id('tb')IS NOT NULL DROP TABLE tb
CREATE TABLE tb (name VARCHAR(3),id INT )
INSERT tb
SELECT 'a', 1 UNION ALL
SELECT 'b' ,4 UNION ALL
SELECT 'c', 12 UNION ALL
SELECT 'd' ,6
SELECT * FROM tb



WITH romance
AS
(
SELECT rn=row_number()OVER (ORDER BY name),name,id FROM tb)
SELECT name,
id=(SELECT sum(id) FROM romance WHERE rn<=a.rn)
FROM romance a

thinclient 2010-05-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dawugui 的回复:]
SQL code
create table tb(c1 varchar(10), c2 int)
insert into tb values('a', 1)
insert into tb values('b', 4)
insert into tb values('c', 12)
insert into tb values('d', 6)
go

select c1 ,
……
[/Quote]
这个语句要正常执行有个前提,就是列1的值必须是一行比它的下一行小
不然,完全得不到正确结果
不是知道楼主的意思是这样么
you_tube 2010-05-22
  • 打赏
  • 举报
回复
select a.column1,sum(a.column2) over() - a.column2 sumval
from tb a
order by a.column1
dawugui 2010-05-22
  • 打赏
  • 举报
回复
--如果你不能确保C1的顺序,需要加个ID,来决定行的顺序.如下:
create table tb(id int , c1 varchar(10), c2 int)  
insert into tb values(1,'a', 1)
insert into tb values(2,'b', 4)
insert into tb values(3,'c', 12)
insert into tb values(4,'d', 6)
go

select c1 ,
c2 = (select sum(c2) from tb where c1 <= t.c1)
from tb t
/*
c1 c2
---------- -----------
a 1
b 5
c 17
d 23

(所影响的行数为 4 行)
*/

select c1 ,
c2 = (select sum(c2) from tb where id <= t.id)
from tb t
/*
c1 c2
---------- -----------
a 1
b 5
c 17
d 23

(所影响的行数为 4 行)
*/
drop table tb

you_tube 2010-05-22
  • 打赏
  • 举报
回复
select a.column1,sum(a.column2) - a.column2
from tb a
group by a.column1
order by a.column1
dawugui 2010-05-22
  • 打赏
  • 举报
回复
create table tb(c1 varchar(10), c2 int)  
insert into tb values('a', 1)
insert into tb values('b', 4)
insert into tb values('c', 12)
insert into tb values('d', 6)
go

select c1 ,
c2 = (select sum(c2) from tb where c1 <= t.c1)
from tb t

drop table tb

/*
c1 c2
---------- -----------
a 1
b 5
c 17
d 23

(所影响的行数为 4 行)
*/
thinclient 2010-05-22
  • 打赏
  • 举报
回复
强列灬关氵主

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧