用变量连接可以完成。
一条语句难以实现,如果只有4条记录,那么:select
(select col1 from AA where 字段='记录1')
+ ',' +
(select col1 from AA where 字段='记录2')
+ ',' +
(select col1 from AA where 字段='记录3')
+ ',' +
(select col1 from AA where 字段='记录4')
一条语句难以实现,如果只有4条记录,那么:select
(select col1 from AA where 字段='记录1')
+ ',' +
(select col1 from AA where 字段='记录2')
+ ',' +
(select col1 from AA where 字段='记录3')
+ ',' +
(select col1 from AA where 字段='记录4')
select
max(case when 字段='记录1' then col1 end)
+ ',' +
max(case when 字段='记录2' then col1 end)
+ ',' +
max(case when 字段='记录3' then col1 end)
+ ',' +
max(case when 字段='记录4' then col1 end)
from AA
create table AA(记录 varchar(10),col1 varchar(10))
insert AA values('记录1','a')
insert AA values('记录2','b')
insert AA values('记录3','c')
insert AA values('记录4','d')select * from AA-- 一般是通过以下方法实现
declare @col varchar(8000)
set @col=''
select @col = @col + col1 + ',' from AA
if @col=''
set @col=','
select left(@col,len(@col)-1)-- 一条语句方法一
select
(select col1 from AA where 记录='记录1')
+ ',' +
(select col1 from AA where 记录='记录2')
+ ',' +
(select col1 from AA where 记录='记录3')
+ ',' +
(select col1 from AA where 记录='记录4')-- 一条语句方法二
select
max(case when 记录='记录1' then col1 end)
+ ',' +
max(case when 记录='记录2' then col1 end)
+ ',' +
max(case when 记录='记录3' then col1 end)
+ ',' +
max(case when 记录='记录4' then col1 end)
from AAdrop table AA
set @sql=''
select @sql=@sql+case when 1=1 then rtrim(AAcol1)+',' else '' end from AA
select @sql
set @sql=''
select @sql=@sql+','+AAcol1 from AA
set @sql=right(@sql,len(@sql)-1)
select @sql
insert AA values('a')
insert AA values('b')
insert AA values('c')
insert AA values('d')
drop table AA
select * from AA
declare @sql varchar(200)
select @sql=''
select @sql = @sql + ',' + AAcoll from AA
set @sql = right(@sql,len(@sql) - 1)
select @sql
为什么要这么限定呢?用存储过程的话可以很轻松地做到?为什么不要?
declare @AA table(AAcoll char(2))
insert @AA values('a')
insert @AA values('b')
insert @AA values('c')
insert @AA values('d')--查询
declare @ varchar(8000) set @='' select @=@+','+aacoll from @aa select substring(@,2,8000)/*--测试结果
---------------------
a ,b ,c ,d (所影响的行数为 1 行)--*/