曾经一位朋友问我这样一个问题:
怎样在查询出来的结果集中增加一个新列(有规律)?
如:数据库中的结构和数据如下: (tableName : People)
Name Age
changchang 20
charles 23
sunny 21
huangzhs 22
dazu 65
现在通过SQL语句把查询的结果显示成:
Id Name Age
1 changchang 20
2 Charles 23
3 sunny 21
4 huangzhs 22
5 dazu 65
首先分析这道题目:(动态的增加新的一列(递增))
要在查询结果集中增加一个新列。而我们通过 select * from People 是没有ID这列的。
所以我们需要在查询出来的结果集中增加(一行一行增加).
实现要牵涉到的技术:
首先想到的是通过游标来实现(游标可以遍历结果集中的每一条记录)。
另外我们可以通过创建临时表或表变量来放增加新的列后的数据。
最后通过查询临时表就可以让查询结果中包含新增加的一列.
现在通过sql语句来实现上面的效果:
--
定义参数
declare
@i
int
declare
@name
varchar
(
50
)
declare
@age
int

--
声明一个游标
declare
c_people
cursor
for
select
*
from
people

--
打开游标
open
c_people

--
创建一个临时表
create
table
#mypeople
(Id
int
,
Name
varchar
(
50
),
Age
int
)

set
@i
=
1
--
读取数据
fetch
next
from
c_people
into
@name
,
@age
while
@@fetch_status
=
0
begin
--
动态的增加新的一列到临时表
insert
into
#mypeople
values
(
@i
,
@name
,
@age
)
set
@i
=
@i
+
1
fetch
next
from
c_people
into
@name
,
@age
end
--
关闭游标
close
c_people
--
删除游标
deallocate
c_people
--
查询临时表
select
*
from
#mypeople
--
删除临时表
drop
table
#mypeople
以上是我想到的实现方法。当然看来还是比较复杂的。如果有什么简单的方案。希望朋友们能及时的提出。分享知识是我最大的快乐。
如:数据库中的结构和数据如下: (tableName : People)
Name Age
changchang 20
charles 23
sunny 21
huangzhs 22
dazu 65
现在通过SQL语句把查询的结果显示成:
Id Name Age
1 changchang 20
2 Charles 23
3 sunny 21
4 huangzhs 22
5 dazu 65
首先分析这道题目:(动态的增加新的一列(递增))
要在查询结果集中增加一个新列。而我们通过 select * from People 是没有ID这列的。
所以我们需要在查询出来的结果集中增加(一行一行增加).
实现要牵涉到的技术:
首先想到的是通过游标来实现(游标可以遍历结果集中的每一条记录)。
另外我们可以通过创建临时表或表变量来放增加新的列后的数据。
最后通过查询临时表就可以让查询结果中包含新增加的一列.
现在通过sql语句来实现上面的效果:





































以上是我想到的实现方法。当然看来还是比较复杂的。如果有什么简单的方案。希望朋友们能及时的提出。分享知识是我最大的快乐。
Charles.Chen 2008-03-04 15:55
发表评论