Sql将2行合并为一行

时间:2010-06-03 10:52:56

标签: sql sql-server tsql

我有这张表Testers

employee name
------------
Sam Korch
dan mano

我想将两行合并为一行,它将是“Sam Korch,Dan Mano”

我有这个查询

select @theString = COALESCE(@theString + ',', '') + EmployeeName 
  from Testers join vw_EKDIR on Testers.TesterGlobalId = vw_EKDIR.GlobalID
 where TestId = 31   

它工作,但我不想做选择我希望结果将在@thestring

所以我尝试做这个查询

set @theString = (
    select  @theString = COALESCE(@theString + ',', '') + EmployeeName 
      from Testers join vw_EKDIR on Testers.TesterGlobalId = vw_EKDIR.GlobalID
     where TestId = 31 
    )

它不起作用......我希望@thestring成为结果。

任何idaes?

谢谢

4 个答案:

答案 0 :(得分:1)

我有这个功能,它可以工作

    ALTER FUNCTION [dbo].[udf_concat] ( @c INT )
            RETURNS VARCHAR(MAX) AS BEGIN
            DECLARE @p VARCHAR(MAX) ;
            SET @p='';
                SELECT    @p = @p + ISNULL(T_NAME.T_FIELD,'')+'|'
                FROM         T_NAME 
where T_NAME.T_OTHER_FIELD=@c

            RETURN @p
            END

答案 1 :(得分:1)

对于SQL Server 2005+,您可以使用FOR XML PATHSTUFF函数返回连接列表:

SELECT @theString = STUFF(SELECT ','+ vwe.employeename
                            FROM TESTERS t
                            JOIN VW_EKDIR vwe ON vwe.globalid = t.testerglobalid
                           WHERE t.testid = ?
                         FOR XML PATH('')), 1, 1, '')

答案 2 :(得分:0)

对于sql-part,不是这样的工作:

SELECT t1.name + ", " + t2.name 
FROM tester t1, 
     tester t2
WHERE t1.TesterGlobalId == t2.GlobalId
AND t1.testId = 31;

我不知道具体的rg-sql-server / rg-tsql。

答案 3 :(得分:0)

设置@theString =(选择COALESCE(@theString +',','')+ EmployeeName       来自Testers在Testers.TesterGlobalId = vw_EKDIR.GlobalID上加入vw_EKDIR      其中TestId = 31     )