sql server 2008用游标把查询结果从多行变成1行

存储过程:ALTERprocedure[dbo].[pat_master_index111]@Schar(10),@Pchar(50),@Ctdate,@Lints是性别... 存储过程:
ALTER procedure [dbo].[pat_master_index111]
@S char(10), @P char(50),@Ct date,@L int s是性别,p是地方,Ct是时间,L是手机号码长度
as
declare @i int,@q varchar(100)
select top 100 NAME+INP_NO from PAT_MASTER_INDEX
where SEX=@S and BIRTH_PLACE =@P and CREATE_DATE >@Ct and LEN(PHONE_NUMBER_BUSINESS)=@L
调用:
exec pat_master_index111 '男','山东省东营市','2011-01-01','11'
结果:
我想把结果变成 : name+inp_no,me+inp_no,me+inp_no,me+inp_no。。。
展开
 我来答
斯内科Snake
2014-03-11 · TA获得超过523个赞
知道小有建树答主
回答量:707
采纳率:50%
帮助的人:243万
展开全部

假设初始表就是你的查询结果设定为A(Name_Id varchar(100))

你是要把所有行转换为一列,尝试这样:

declare @sql varchar(8000)
set @sql=''
select @sql=@sql+',max(case when Name_Id='''+Name_Id+''' then Name_Id else '''' end) as '''
+Name_Id+'''' from A
set @sql=stuff(@sql,1,1,'')
exec('select '+@sql+' from A')
追问
http://zhidao.baidu.com/question/134675750164753165.html  
你看看这个问题 ,有数据。 你看能解决下吗?
追答
ALTER procedure [dbo].[pat_master_index111]
@S char(10), @P char(50),@Ct date,@L int    
--s是性别,p是地方,Ct是时间,L是手机号码长度
as
begin
declare @i int,@q varchar(100)
declare @sql varchar(8000)
set @sql=''
declare @Name_Id varchar(100)
declare cur cursor for
select top 100 NAME+INP_NO   from  PAT_MASTER_INDEX
where SEX=@S and BIRTH_PLACE =@P and CREATE_DATE >@Ct and  LEN(PHONE_NUMBER_BUSINESS)=@L
open cur
fetch next from cur into @Name_Id
while @@fetch_status=0
begin
set @sql=@sql+','+@Name_Id

fetch next from cur into @Name_Id
end
close cur
deallocate cur
end 
set @sql=stuff(@sql,1,1,'')
select @sql
END
百度网友7558ae7
2014-03-11 · TA获得超过5797个赞
知道小有建树答主
回答量:1730
采纳率:50%
帮助的人:1699万
展开全部
我比较喜欢用循环
ALTER procedure [dbo].[pat_master_index111]
@S char(10), @P char(50),@Ct date,@L int s是性别,p是地方,Ct是时间,L是手机号码长度
as
declare @i int,@q varchar(100),@next int,@name_id varchar(max)
create table #name_id (id int identity(1,1),name varchar(200))
insert into #name_id select top 100 NAME+INP_NO from PAT_MASTER_INDEX
where SEX=@S and BIRTH_PLACE =@P and CREATE_DATE >@Ct and LEN(PHONE_NUMBER_BUSINESS)=@L
set @next=1
while @next<=(select count(*) from #name_id)
begin
select @name_id=@name_id+name+',' from #name_id where id=@next
set @next=@next+1
end
select @name_id
drop table #name_id
更多追问追答
追问

查询结果为

追答
select @name_id
drop table #name_id
改成
drop table #name_id
return @name_id
试一下,因为语句没测试,你再试下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式