SQL语句查询结果集中的动态修改案例(临时表+游标)

本文转载:http://www.cnblogs.com/Charles2008/archive/2008/03/04/1090314.html

曾经一位朋友问我这样一个问题:怎样在查询出来的结果集中增加一个新列(有规律)?
如:数据库中的结构和数据如下: (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
以上是我想到的实现方法。当然看来还是比较复杂的。如果有什么简单的方案。希望朋友们能及时的提出。分享知识是我最大的快乐。

时间: 2024-10-22 10:50:46

SQL语句查询结果集中的动态修改案例(临时表+游标)的相关文章

Sql server 数据库中,纯SQL语句查询、执行 单引号问题。

原文:Sql server 数据库中,纯SQL语句查询.执行 单引号问题. 在默认值情况下, select 'abc',Titile from tb_Name;  ---输出内容 是abc: 如果想输出 单引号 'abc,需要使用select '''abc',Titile from tb_Name; ---这里用三个单引号'''abc: select '''abc''',Title from tbName;   输出内容是'abc':两边带有单引号: 谨记:如果字符串包含单引号,则需要在单引号前

只有两个字段用一个sql语句查询出某个学生的姓名、成绩以及在表中的排名_数据库其它

昨天去面试时遇到一个这样的问题: 有一张成绩表,只有两个字段,姓名和成绩.怎样用一个sql语句查询出某个学生的姓名,成绩以及在表中的排名? 一时间我也想不出具体实现,我就提了两种思路:一种是通过join关联一个查询出他排名的sql语句:一种是通过group by来实现. 回答得连自己都觉得有点心虚.请问大家如何实现呢? 假设:表名字为Course,两个字段分别为name和score 实现语句: SELECT 学生,成绩, (SELECT COUNT(*) FROM 表 WHERE a.成绩<=成

MySQL中优化sql语句查询常用的30种方法

本篇文章是对MySQL中优化sql语句查询常用的30种方法进行了详细的分析介绍,需要的朋友参考下   1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以

sql语句查询问题。。。。。

问题描述 sql语句查询问题..... 一张学生表,字段学生姓名name,学科xk,成绩cj,查询平均成绩大于90,并且语文成绩大于95的学生姓名, 求解答~!!! 解决方案 命名查询的sql语句的问题一个SQL语句查询问题(查询最小值SQL语句中模糊查询的下划线的问题 解决方案二: select distinct 姓名name from (select 姓名name, 学科xk,成绩cj,avg(成绩cj) over (partition by 姓名name) as avg_cj from 学

sql-如何用SQL语句查询Table表中的ID1中的O1,O2,O3为1 的数目

问题描述 如何用SQL语句查询Table表中的ID1中的O1,O2,O3为1 的数目 如何用SQL语句查询Table表中的ID1中的O1,O2,O3为1 的数目 Table ID O1 O2 O3 ID1 1 1 0 ID2 1 0 1 ID3 0 1 1 解决方案 select COUNT(*), (select COUNT(*) FROM a where O1='1') AS COUNTO1,(SELECT COUNT(*) FROM A WHERE O2="1") AS COUN

sql语句-表T(A)包含正整数,可能有重复,构造一个SQL语句查询不在表T中的最小正整数

问题描述 表T(A)包含正整数,可能有重复,构造一个SQL语句查询不在表T中的最小正整数 表T(A)包含正整数,可能有重复,构造一个SQL语句查询不在表T中的最小正整数,需要考虑表T包含或不包含正整数1两种情况.不能编程实现.考虑了半天没有很好的思路,请大家指点则个 解决方案 DECLARE @minvalue INT = select min(A) from T IF minvalue > 1 return 1 ELSE DECLARE @maxvalue INT = select max(A

请帮忙写一条SQL语句查询前一小时信息

问题描述 请帮忙写一条SQL语句查询前一小时信息 MSSQLServer,有个字段DateTime:2015-03-09 16:08:51.617 我想查询前一小时的信息,因为我公司是45分下班的,所以前一小时应该是14:45:00~14:45:00. 请问如何写一条语句可以查到当前小时的前一小时的信息呢?谢谢帮忙. 解决方案 select * from table where DATEDIFF('h',DateTime,now())>1 and DATEDIFF('h',DateTime,no

php通过odbc用sql语句查询时无法查询中文,应该怎么转码?

问题描述 php通过odbc用sql语句查询时无法查询中文,应该怎么转码? 数据库是informix,编码是iso-8859-1,php编码是gbk.从网上找了各种方式转换,都不行.代码如下,其中$licenseno是车牌号,中间有省份缩写是汉字. $sql.=""and b.licenseno = """".$licenseno.""""""; 会返回错误如下: Warning: od

条件复杂的sql语句查询

问题描述 条件复杂的sql语句查询 有三张表 分别为 会员表(member) 销售表(sale) 退货表(regoods) 会员表有字段 memberid (会员id,主键) credits(积分); 销售表有字段 memberid(会员id ,外键) 购买金额(MNAccount); 退货表中有字段memberid(会员id ,外键) 退货金额(RMNAccount); 业务说明 : 1.销售表中的销售记录可以是会员购买,也可是非会员购买.(即销售表中的memberid可以为空) 2.销售表中