sql语句怎样将查询结果逗号分开

股神 2008-01-07 12:50:16
select id from table

结果,
1
2
3
4
如何得到1,2,3,4
谢谢
...全文
728 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzy_love_sly 2008-01-07
  • 打赏
  • 举报
回复

drop table tb
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3
GO
drop function f_str
--合并处理函数
CREATE FUNCTION dbo.f_str(@col1 varchar(10))
RETURNS varchar(100)
AS
BEGIN
DECLARE @re varchar(100)
SET @re=''
SELECT @re=@re+','+CAST(col2 as varchar)
FROM tb
WHERE col1=@col1
RETURN(STUFF(@re,1,1,''))
END
GO

--调用函数
SELECT col1,col2=dbo.f_str(col1) FROM tb GROUP BY col1


col1 col2
a 1,2
b 1,2,3
chuifengde 2008-01-07
  • 打赏
  • 举报
回复
declare @a varchar(100)
select @a=isnull(@a+',','')+ltrim(id) from table order by id


select @a
yinqi025 2008-01-07
  • 打赏
  • 举报
回复
这就是行转列,就必须建一个函数了
还有你的那个没办法实现,只能与一个列来进行聚合才行

--外部配置
if exists(select 1 from sysobjects where name='selectGroup')
begin
drop table selectGroup
end
go
--创建表
create table selectGroup(
id int,
name varchar(50)
)
go

--创建函数
create function dbo.RowsToColumn(@Column varchar(100))
returns varchar(1000)
as
begin
declare @tempString varchar(1000)
set @tempString=''
select @tempString=@tempString+','+cast(id as varchar)
from selectGroup
where [name]=@Column
RETURN(stuff(@tempString,1,1,''))
end
go

--测试数据
insert selectGroup select 1,'b'
union all select 2,'a'
union all select 3,'a'
union all select 4,'a'
go

--测试数据
select [name],dbo.RowsToColumn([name]) as 结果 from selectGroup
group by [name]


--消毁
drop table selectGroup
drop function dbo.RowsToColumn
andysun88 2008-01-07
  • 打赏
  • 举报
回复

declare @strValue varchar(max)
set @strValue =''
select @strValue = @strValue + Convert(varchar,id)+',' from [table]
select substring(@strValue,0,len(@strValue)) as Ids

測試結果
ids
1 1,2,3,4
fa_ge 2008-01-07
  • 打赏
  • 举报
回复

declare @string varchar(100)
set @string=''

select @string=@string+','+cast(id as varchar)
from table
order by id

select STUFF(@string,1,1,'')

dawugui 2008-01-07
  • 打赏
  • 举报
回复
select col from table

结果集:
1
2
3
4
5

我想要的是用逗号隔开的一个字符串
1,2,3,4,5

最好是用SQL语句来实现。。。我不想用游标来实现。。。
100分奉上。谢谢。。


declare @output varchar(8000)
select @output = coalesce(@output+',', '') + col from table
print @output



--如果col是数值型要转换一下:
declare @output varchar(8000)
select @output = coalesce(@output+',', '') + cast(col as varchar) from table
print @output

declare @output varchar(8000)

--输出系统表sysobjects的colid
select @output = coalesce(@output+',', '') + cast(colid as varchar) from syscolumns where id = object_id('sysobjects') order by colid
print @output
/*
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
*/

--输出系统表sysobjects的列名
set @output=null
select @output = coalesce(@output+',', '') + name from syscolumns where id = object_id('sysobjects') order by colid
print @output
/*
name,id,xtype,uid,info,status,base_schema_ver,replinfo,parent_obj,crdate,ftcatid,schema_ver,stats_schema_ver,type,userstat,sysstat,indexdel,refdate,version,deltrig,instrig,updtrig,seltrig,category,cache
*/


create table tb(id varchar(10),username varchar(10))
insert into tb values('1', '123')
insert into tb values('2', '234')
insert into tb values('3', 'hell')
go

declare @a varchar(5000),@b varchar(5000)
select @a='',@b=''
select @a=@a+','+rtrim(id),@b=@b+','+username from tb
select 'id',stuff(@a,1,1,'') union select 'username',stuff(@b,1,1,'')


drop table tb

/*
-------- --------------
id 1,2,3
username 123,234,hell

(所影响的行数为 2 行)
*/
ojuju10 2008-01-07
  • 打赏
  • 举报
回复

declare @string varchar(100)

select @string=Isnull(@string,'')+ltrim(id)+','
from table
order by id

select left(@string,len(@string)-1)


yangjiexi 2008-01-07
  • 打赏
  • 举报
回复

declare @string varchar(100)
set @string=''

select @string=@string+','+cast(id as varchar)
from table
order by id

select STUFF(@string,1,1,'')
基于java实现的数据库管理系统 ⼀、需求分析说明 通过对数据库系统原理的学习,掌握数据库管理系统的运⾏原理,尝试在给定的DBF⽂件操作框架的物理储存基础上通过java建⽴⼀个数据 库管理系统,以更好的温习学习的知识。 基本功能如下: 实现创建表,并把约束条件存储到建⽴好的数据字典中 为表添加删除列操作和删除表操作 实现对表数据的插⼊操作,并实现插⼊前约束检测 实现对表数据删除操作 实现对表数据的修改操作,修改前对修改数据进⾏约束检测 实现对表数据的查询操作,完成多表查询,单条件多条件查询,单字段排序与多字段排序 实现对输⼊过的SQL语句进⾏系统⽇志记录,并添加时间 界⾯友好,易与操作,通过创建⼀个简单的窗⼝实现对SQL语句的输⼊和对运⾏结果的显⽰ 该系统存在于com.silence.mysql包中,系统⽂件夹⽬录下的data⽂件夹是数据库DBF⽂件的存储⽬录,logs⽂件夹是系统⽇志⽂件⽬录。 该模块是数据库系统的主模块,在包主⽬录下,包括三个类DBMS.java、DBMSForm.java、MyException: DBMS.java:系统的运⾏中⼼,通过输⼊的SQL语句开头将SQL语句传⼊到相应的⼦模块,并对SQL语句进⾏标准化预处理;通过对输⼊ 的正确的SQL语句实现对系统⽇志的记录 DBMSForm.java:系统的显⽰窗⼝,通过单例模式创建⼀个显⽰窗⼝,实现对SQl语句的输⼊操作和对运⾏结果的反馈显⽰,提供接⼝实现 让其他模块运⾏时对UI界⾯的即时刷新,该类中的main函数是系统的运⾏⼊⼝ MyException.java:⾃定义异常,通过接收⼦模块抛出的运⾏时异常,实现将异常反馈输出到UI界⾯中供⽤户参考 该模块在包名下的dbf包中,通过javadbf4.1.jar包提供的DBF⽂件操作函数库,实现对数据库DBF⽂件的读写操作,该模块包括 DBFContent.java和DBFUtils.java两个类。 DBFContent.java:这个是⼀个JavaBean,通过将读取到的DBF中数据存储到这个JavaBean中,实现对数据库中数据的操作 DBFUtils.java:DBF⽂件操作⼯具类,通过对javadbf4.1.jar中函数的调⽤,实现对DBF⽂件的读写操作,提供创建表,插⼊表和查询表 的操作函数 该模块在包名下的where包中,通过对SQL字符串中提取的where块的解析,实现将where语句条件翻译成OR条件组,OR条件组中包括 AND条件组,条件组类中提供对⼀条记录的条件匹配操作函数,进⽽实现对⼀条记录的where条件匹配操作,供数据库⼦模块使⽤。该模块 包括两个类:OrOfWhere.java和AndOfWhere.java: OrOfWhere.java:每个实例代表由OR连接的条件语句块的⼀边,OR语句块中可能包含多个And语句 AndOfWhere.java:每个实例代表⼀个AND连接的条件语句块的⼀边,AND语句块实现了Between…and…、=、<>、<、<=、>、>=条件 匹配 该模块在包名下的module包中,其中包括Create.java、Alter.java、Drop.java、Insert.java、Delete.java、Update.java、Select.java 七个功能,每个模块的构造函数和init()函数执⾏对SQL语句的解析和信息提取,合成可视化的执⾏类,模块中的excuteSQL()函数是该模 块的执⾏函数,执⾏结果返回到DBMSForm中进⾏UI刷新,信息反馈。 通过对Create table Student(列名 数据类型 约束条件 ………);语句的截取得到表名,将"("和")"中间的字符串以逗号分开得到列 字符串,再以空格分解得到列名,类型和约束条件。 通过对DBFUtils.createDBF()函数的调⽤实现表的创建操作,将约束条件作为记录添加到data⽬录下的"constraint.dbf"中实现对约束 条件的数据字典存储,操作过程中,primary key,unique,not null模仿Linux中的权限数的⽅式,primary key为1,unique为2,not null为4,来实现⼀个整数记录三个约束条件的⽬的。 通过对SQL字符串拆分解析,提取表名、列名和"ADD"、"DROP",将对应数据表中的数据读取到内存中,并根据列名对 DBFContent中的字段数组进⾏增加和删除,再将执⾏后的DBFContent回写⼊DBF⽂件中,实现添加删除列操作。 由于每个数据库表以⼀个⽂件来存储,⽂件名即是表名,删除表操作实际上是提取SQL字符串中的表名,再到data⽂件夹下删除对应的⽂ 件。 根据空格拆分SQL字符串,提取表名和列属性的键值对,通
移动飞信代发服务数据库编程接口说明 移动飞信代发服务接口使用数据库记录查询方式实现,支持MS SQL及Access数据库,只用到一个FetionTb表进行交换,运行之前请先创建好FetionTb表,然后配置SYSSET.INI文件的"数据库类型"及"连接字符串"。 一、FetionTb表结构字段含意如下: id字段(自动编号):主键,标识不同的命令记录 Com字段(字符型,长20):命令字符串,支持四个命令是"发送短信"、"添加好友"、"好友列表"、"接收短信" myMNo字段(字符型,长20):发送短信手机的号码 myMPass字段(字符型,长30):发送短信手机的飞信密码 toMNo字段(字符型,长250):接收短信手机的号码,多个接收号码可以用逗号","分开 (是飞信好友才会发送成功,当与发送手机号相同时就会发给自己了) Msg字段(字符型,长250):短信内容,不能超过移动短信要求的长度 reok字段(数字型):命令记录处理状态,有4个值表示,-1=正在处理中,0=等待处理中,1=处理完成,2=已经提取处理结果,10=收到的短信 retxt字段(备注型):处理完成后返回的信息 addTime字段(时间型):记录加入时间或最后处理时间 mtype字段(字符型,长20):可以是任意字符,客户程序可用来自行定义命令执行区分标志 二、客户程序发送流程: 1)客户程序将命令记录(如"发送短信")插入表(注意reok字段要等于0,retxt字段要为空) SQL语句例:INSERT FetionTb(Com,myMNo,myMPass,toMNo,Msg,reok,retxt,addTime,mtype) VALUES('发送短信','13700000008','888888','13600000088','你好!',0,'',getdate(),'1234') 2)客户程序定时查询执行结果,主要查reok字段是否变为1 SQL语句例:SELECT retxt from FetionTb where reok=1 and myMNo='13700000008' and toMNo='13600000088' and mtype='1234' 当结果不为空时说明记录执行完成 3)客户程序查到命令结果后,还要把reok字段改为2,以通知服务程序命令完成,可以删除此记录了 SQL语句例:UPDATE FetionTb SET reok=2 where reok<>0 and myMNo='13700000008' and toMNo='13600000088' and mtype='1234' 注:如果不修改reok字段改为2,服务程序也会在10分钟至1个半小时左右删除已经执行完成的记录,如要保存发送记录,请自行记录到别的表。 对于"添加好友"命令,Msg字段可以为空串;"好友列表"命令toMNo字段与Msg字段可以为空串 三、好友列表返回结果说明:好友之间以逗号","分开,每个好友又以"|"分开名称与手机号码,客户程序可以把字符串处理分割成列表。 例如:"张三|13788888881,李四|1360000002" 四、接收短信说明:“接收短信”是服务程序收到的当前号码短信,reok字段为10,用户以这个为条件查收短信,查收后请把reok字段改为2,或直接删除。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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