日期:2014-05-18  浏览次数:20443 次

如何把多列多行合并成一行
例:
表结构如下:
user phone
a 123456a
b 123456b
c 123456c

希望变成一行结果如下:
a:123456a;b:123456b,c:123456c

如果方法能高效一点那就更好了,因为数据量不小,谢谢

------解决方案--------------------
SQL code
问题描述:
无论是在sql 2000,还是在 sql 2005 中,都没有提供字符串的聚合函数,
  所以,当我们在处理下列要求时,会比较麻烦:
有表tb, 如下:
id    value
----- ------
1     aa
1     bbe

------解决方案--------------------
或用

declare @s nvarchar(max)
select @s=isnull(@s+';','')+user+':'+phone from table
print @s
------解决方案--------------------
SQL code
DECLARE @TB TABLE([user] VARCHAR(2),    phone VARCHAR(15))
INSERT @TB
SELECT 'a',  '123456a' UNION ALL 
SELECT 'b',  '123456b' UNION ALL 
SELECT 'c',  '123456c'

DECLARE @SQL VARCHAR(100)
SET @SQL=''
SELECT @SQL=@SQL+[user]+':'+phone 
FROM @TB

SELECT @SQL
/*
a:123456ab:123456bc:123456c

(1 row(s) affected)
*/

------解决方案--------------------
把所有的行,循环一下。

这样写
SQL code

declare @sql varchar(8000)
set @sql=''

declare @id varchar(50)
set @id=''
declare @name varchar(50)
set @name=''

while @a>0  ---或用游标,自己看着办
begin
  --得到@id  @name
  @sql=@sql+','+cast(@id as varchar(50))+','+@name
  --设置@a的值
end

if len(@sql)>0
begin
  set @sql=right(1,len(@sql)-1)
  exec('select '+@sql)
end