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 语句如何实现
...全文
144 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
学习

34,837

社区成员

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

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