declare @str varchar(100) set @str='' select @str=@str+col from table print @str
declare @tb table(id int identity(1,1) not null,name nvarchar(5)) insert into @tb values('中'),('国'),('人'),('民') declare @str varchar(50) set @str='' select @str=@str+'+'+ name from @tb select RIGHT(@str,LEN(@str)-1 )
---------------------------------------------------- /*如何将一列中所有的值一行显示 数据源 a b c d e 结果 a,b,c,d,e */create table tb(col varchar(20)) insert tb values ('a') insert tb values ('b') insert tb values ('c') insert tb values ('d') insert tb values ('e') go--方法一 declare @sql varchar(1000) set @sql = '' select @sql = @sql + t.col + ',' from (select col from tb) as t set @sql='select result = ''' + left(@sql , len(@sql) - 1) + '''' exec(@sql) /* result ---------- a,b,c,d,e, */--方法二 declare @output varchar(8000) select @output = coalesce(@output + ',' , '') + col from tb print @output /* a,b,c,d,e */drop table tb
WITH #001 AS( SELECT 1 AS id,'中' AS id_name UNION ALL SELECT 2 AS id,'国' AS id_name UNION ALL SELECT 3 AS id,'人' AS id_name UNION ALL SELECT 4 AS id,'民' AS id_name )SELECT [拼接] = STUFF(( SELECT '+' + [id_name] FROM #001 ORDER BY id FOR XML PATH('') ), 1, 1, '') --输出:拼接中+国+人+民(1 行受影响)
WITH #001 AS( SELECT 1 AS id,'中' AS id_name UNION ALL SELECT 2 AS id,'国' AS id_name UNION ALL SELECT 3 AS id,'人' AS id_name UNION ALL SELECT 4 AS id,'民' AS id_name )SELECT [拼接] = STUFF(( SELECT '+' + [id_name] FROM #001 ORDER BY id FOR XML PATH('') ), 1, 1, '') --结果: 拼接 中+国+人+民(1 行受影响)
declare @tb table(id int identity(1,1) not null,name nvarchar(5)) insert into @tb values('中'),('国'),('人'),('民') declare @str varchar(50) set @str='' select @str=@str+'+'+ name from @tb select RIGHT(@str,LEN(@str)-1 )
5楼的这个方法好,但是 declare @output varchar(8000) select @output = coalesce(@output + ',' , '') + col from tb print @output 输出,为什么是打印输出,有方法,在表格中输出吗?
类似于 select 列1 as a from 表格这样的输出方法吗?
--> 测试数据:[tbl] if object_id('[tbl]') is not null drop table [tbl] create table [tbl]([ID] int,[Name] varchar(2)) insert [tbl] select 1,'中' union all select 2,'国' union all select 3,'人' union all select 4,'民'declare @str varchar(100) set @str='' select @str=@str+[Name] from [tbl] set @str='select 字段名='+quotename(@str,'''') exec(@str)字段名 中国人民
有方法,查询其他字段吗? 比如和 GROUP BY 一起使用。
SELECT [拼接] = STUFF(( SELECT '+' + [id_name] FROM #001 ORDER BY id FOR XML PATH('') ), 1, 1, '') 你就算有1W记录,也是这一句 语句就可以呀,不用写其他的撒,他自动id_name列下的所有记录相“+”
SELECT [拼接] = STUFF(( SELECT '+' + [id_name] FROM #001 ORDER BY id FOR XML PATH('') ), 1, 1, '') 你10W条记录也就是这条语句
set @str=''
select @str=@str+col from table
print @str
insert into @tb values('中'),('国'),('人'),('民')
declare @str varchar(50)
set @str=''
select @str=@str+'+'+ name from @tb
select RIGHT(@str,LEN(@str)-1 )
--------------------------------------------------
中+国+人+民(1 行受影响)
/*如何将一列中所有的值一行显示
数据源
a
b
c
d
e
结果
a,b,c,d,e
*/create table tb(col varchar(20))
insert tb values ('a')
insert tb values ('b')
insert tb values ('c')
insert tb values ('d')
insert tb values ('e')
go--方法一
declare @sql varchar(1000)
set @sql = ''
select @sql = @sql + t.col + ',' from (select col from tb) as t
set @sql='select result = ''' + left(@sql , len(@sql) - 1) + ''''
exec(@sql)
/*
result
----------
a,b,c,d,e,
*/--方法二
declare @output varchar(8000)
select @output = coalesce(@output + ',' , '') + col from tb
print @output
/*
a,b,c,d,e
*/drop table tb
WITH #001
AS(
SELECT 1 AS id,'中' AS id_name
UNION ALL
SELECT 2 AS id,'国' AS id_name
UNION ALL
SELECT 3 AS id,'人' AS id_name
UNION ALL
SELECT 4 AS id,'民' AS id_name
)SELECT [拼接] = STUFF(( SELECT '+' + [id_name]
FROM #001 ORDER BY id
FOR
XML PATH('')
), 1, 1, '') --输出:拼接中+国+人+民(1 行受影响)
WITH #001
AS(
SELECT 1 AS id,'中' AS id_name
UNION ALL
SELECT 2 AS id,'国' AS id_name
UNION ALL
SELECT 3 AS id,'人' AS id_name
UNION ALL
SELECT 4 AS id,'民' AS id_name
)SELECT [拼接] = STUFF(( SELECT '+' + [id_name]
FROM #001 ORDER BY id
FOR
XML PATH('')
), 1, 1, '') --结果:
拼接
中+国+人+民(1 行受影响)
insert into @tb values('中'),('国'),('人'),('民')
declare @str varchar(50)
set @str=''
select @str=@str+'+'+ name from @tb
select RIGHT(@str,LEN(@str)-1 )
--------------------------------------------------
中+国+人+民(1 行受影响)
declare @output varchar(8000)
select @output = coalesce(@output + ',' , '') + col from tb
print @output
输出,为什么是打印输出,有方法,在表格中输出吗?
select 列1 as a from 表格这样的输出方法吗?
--> 测试数据:[tbl]
if object_id('[tbl]') is not null drop table [tbl]
create table [tbl]([ID] int,[Name] varchar(2))
insert [tbl]
select 1,'中' union all
select 2,'国' union all
select 3,'人' union all
select 4,'民'declare @str varchar(100)
set @str=''
select @str=@str+[Name] from [tbl]
set @str='select 字段名='+quotename(@str,'''')
exec(@str)字段名
中国人民
比如和 GROUP BY 一起使用。
FROM #001 ORDER BY id
FOR
XML PATH('')
), 1, 1, '')
你就算有1W记录,也是这一句 语句就可以呀,不用写其他的撒,他自动id_name列下的所有记录相“+”
FROM #001 ORDER BY id
FOR
XML PATH('')
), 1, 1, '')
你10W条记录也就是这条语句