![](/img/trans.png)
[英]How to combine multiple rows into one ,getting the one column that differs as comma separated values in t-sql?
[英]How to return multiple values in one column (T-SQL)?
我有一个表UserAliases
( UserId, Alias
),每个用户有多个别名。 我需要查询它并返回给定用户的所有别名,诀窍是将它们全部返回在一列中。
例子:
UserId/Alias
1/MrX
1/MrY
1/MrA
2/Abc
2/Xyz
我想要以下格式的查询结果:
UserId/Alias
1/ MrX, MrY, MrA
2/ Abc, Xyz
谢谢你。
我正在使用 SQL Server 2005。
ps 实际的 T-SQL 查询将不胜感激:)
您可以使用COALESCE的功能。
CREATE FUNCTION [dbo].[GetAliasesById]
(
@userID int
)
RETURNS varchar(max)
AS
BEGIN
declare @output varchar(max)
select @output = COALESCE(@output + ', ', '') + alias
from UserAliases
where userid = @userID
return @output
END
GO
SELECT UserID, dbo.GetAliasesByID(UserID)
FROM UserAliases
GROUP BY UserID
GO
嗯......我看到答案已被接受......但我认为你应该看到另一种解决方案:
/* EXAMPLE */
DECLARE @UserAliases TABLE(UserId INT , Alias VARCHAR(10))
INSERT INTO @UserAliases (UserId,Alias) SELECT 1,'MrX'
UNION ALL SELECT 1,'MrY' UNION ALL SELECT 1,'MrA'
UNION ALL SELECT 2,'Abc' UNION ALL SELECT 2,'Xyz'
/* QUERY */
;WITH tmp AS ( SELECT DISTINCT UserId FROM @UserAliases )
SELECT
LEFT(tmp.UserId, 10) +
'/ ' +
STUFF(
( SELECT ', '+Alias
FROM @UserAliases
WHERE UserId = tmp.UserId
FOR XML PATH('')
)
, 1, 2, ''
) AS [UserId/Alias]
FROM tmp
/* -- OUTPUT
UserId/Alias
1/ MrX, MrY, MrA
2/ Abc, Xyz
*/
看看StackOverflow上的这个线程 ,它方便地给你一个T-SQL示例。
这是在不需要UDF的情况下完成所需操作的最快速,最简单的方法之一: http : //weblogs.sqlteam.com/mladenp/archive/2007/06/01/60220.aspx
有另一种方法使用数字表对于真正大的数据集更快,但我认为你不需要那样。
2003年,我的老板就这样写了一篇文章: 与COALESCE连接
DECLARE @Str varchar(500)
SELECT @Str=COALESCE(@Str,'') + CAST(ID as varchar(10)) + ','
FROM dbo.fcUser
SELECT @Str
您可以使用游标循环遍历行并附加到临时表中的字段,也可以使用COALESCE函数来连接字段。
对不起,第一次读错了。 你可以这样做:
declare @result varchar(max)
--must "initialize" result for this to work
select @result = ''
select @result = @result + alias
FROM aliases
WHERE username='Bob'
group_concat()听起来像你正在寻找的。
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
因为你在mssql上,我只是用Google搜索“group_concat mssql”并找到一堆命中来重新创建group_concat功能。 这是我找到的一个点击:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.