sql 语句的问题

kathy_lxy 2008-03-14 11:10:26
如下数据表:

A A1
a 1
a1 1
a2 2
a3 4
要得到,每个A1自动加所在的行数据.即:
A A1
a 2
a1 3
a2 5
a3 8

用whille 语句如何实现
...全文
107 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dawugui 2008-03-14
--如果A列不能区分大小,只能使用临时表
create table tb(A varchar(10) , A1 int)
insert into tb values('a' , 1)
insert into tb values('a1', 1)
insert into tb values('a2', 2)
insert into tb values('a3', 4)
go

select * , px = identity(int,1,1) into tmp from tb

select A , A1 = A1 + px from tmp

drop table tb,tmp

/*
A A1
---------- -----------
a 2
a1 3
a2 5
a3 8

(所影响的行数为 4 行)
*/
回复
dulei115 2008-03-14
select A, A1 + (select count(1) from tableA where A <= tbA.A)
from tableA tbA
回复
dawugui 2008-03-14
create table tb(A varchar(10) ,  A1 int)   
insert into tb values('a' , 1)
insert into tb values('a1', 1)
insert into tb values('a2', 2)
insert into tb values('a3', 4)
go

select A , A1 = A1 + px from
(
select * , px = (select count(1) from tb where A < t.A) + 1 from tb t
) m

drop table tb

/*
A A1
---------- -----------
a 2
a1 3
a2 5
a3 8

(所影响的行数为 4 行)
*/
回复
liangCK 2008-03-14
declare @T table (col1 varchar(10),col2 int)
insert @T values('a',1)
insert @T values('a1',1)
insert @T values('a2',2)
insert @T values('a3',4)

select *,col3=(select sum(col2) from @T where col1<=A.col1)
from @T A

/*
col1 col2 col3
---------- ----------- -----------
a 1 1
a1 1 2
a2 2 4
a3 4 8

(4 行受影响)

*/
回复
dawugui 2008-03-14
select A , A1 = A1 + px from
(
select * , px = (select count(1) from tb where A < t.A) + 1 from tb t
) m
回复
fqbnet2050 2008-03-14
我还是没太明白啊,能不能说明白一点啊。
回复
you_tube 2008-03-14
[Quote=引用 7 楼 fqbnet2050 的回复:]
请教一下老乌龟
SQL codedeclare@tbTable(nidintidentity(1,1),numint)insert@tbselect1unionallselect3unionallselect4unionallselect8unionallselect16unionallselect87select*from@tb/*1 1
2 3
3 4
4 8
5 16
6 87*/selectnid, num=num+ncolfrom(select*,ncol=(selectcount(*)from@tbwherenid<=m.nid)from@tbm
) n
以上是正确结果,请看一下下面这段代码
SQL codeselectnid, num=num+ncolfrom(select*,nc…
[/Quote]

-------------------------------------------
你这里只能加第一个NID的数据,nid<=m.nid这句条件不允许向下循环了.
回复
tjg5202 2008-03-14
xuexizhong/........
回复
QQQQAnnie 2008-03-14
xuexi
回复
fqbnet2050 2008-03-14
就是每个col的值都等于总行数,相当于把每个num都加上了6,

申明一下,在我这个表里面可以用 num+nid 直接算的,如果是这方面的建议的话就不用提了。
我的主要目的是了解一下 上面两个语句的区别,以防以后犯类似的错误。
回复
fqbnet2050 2008-03-14
请教一下老乌龟

declare @tb Table(nid int identity(1,1),num int )

insert @tb select 1
union all select 3
union all select 4
union all select 8
union all select 16
union all select 87

select * from @tb
/*
1 1
2 3
3 4
4 8
5 16
6 87
*/

select nid, num=num+ncol from
(
select *,ncol=(select count(*) from @tb where nid<=m.nid)from @tb m
) n



以上是正确结果,请看一下下面这段代码

select nid, num=num+ncol from
(
select *,ncol=(select count(*) from @tb m where m.nid<=nid)from @tb
) n
--错误结果,算出的ncol=count(*)


为什么呢? 请教一下

回复
luofeng2006 2008-03-14
学习
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-14 11:10
社区公告
暂无公告