在Microsoft SQL Server 2005中使用concat MySQL函数?

我正尝试将基于MySQL的应用程序迁移到Microsoft SQL Server 2005(不是通过选择,但是这是生活)。

在原来的应用程序中,我们几乎完全使用了符合ANSI-SQL的语句,但有一个明显的例外 - 我们经常使用MySQL的group_concat函数。

group_concatgroup_concat是这样做的:给定一个表,例如员工姓名和项目......

SELECT empName, projID FROM project_members;

收益:

ANDY   |  A100
ANDY   |  B391
ANDY   |  X010
TOM    |  A100
TOM    |  A510

...以下是你用group_concat得到的结果:

SELECT 
    empName, group_concat(projID SEPARATOR ' / ') 
FROM 
    project_members 
GROUP BY 
    empName;

收益:

ANDY   |  A100 / B391 / X010
TOM    |  A100 / A510

所以我想知道的是:是否有可能在SQL Server中编写用户定义的函数来模拟group_concat的功能?

我几乎没有使用UDF,存储过程或类似的东西的经验,只是直接的SQL,所以请在错误方面太多解释:)


没有真正简单的方法来做到这一点。 虽然有很多想法。

我找到的最好的一个:

SELECT table_name, LEFT(column_names , LEN(column_names )-1) AS column_names
FROM information_schema.columns AS extern
CROSS APPLY
(
    SELECT column_name + ','
    FROM information_schema.columns AS intern
    WHERE extern.table_name = intern.table_name
    FOR XML PATH('')
) pre_trimmed (column_names)
GROUP BY table_name, column_names;

或者如果数据可能包含诸如<字符,则该版本可以正常工作

WITH extern
     AS (SELECT DISTINCT table_name
         FROM   INFORMATION_SCHEMA.COLUMNS)
SELECT table_name,
       LEFT(y.column_names, LEN(y.column_names) - 1) AS column_names
FROM   extern
       CROSS APPLY (SELECT column_name + ','
                    FROM   INFORMATION_SCHEMA.COLUMNS AS intern
                    WHERE  extern.table_name = intern.table_name
                    FOR XML PATH(''), TYPE) x (column_names)
       CROSS APPLY (SELECT x.column_names.value('.', 'NVARCHAR(MAX)')) y(column_names) 

我可能对晚会有点迟,但这种方法适用于我,比COALESCE方法更容易。

SELECT STUFF(
             (SELECT ',' + Column_Name 
              FROM Table_Name
              FOR XML PATH (''))
             , 1, 1, '')

现在可能已经太晚了,但这不是最简单的方法吗?

SELECT     empName, projIDs = replace
                          ((SELECT Surname AS [data()]
                              FROM project_members
                              WHERE  empName = a.empName
                              ORDER BY empName FOR xml path('')), ' ', REQUIRED SEPERATOR)
FROM         project_members a
WHERE     empName IS NOT NULL
GROUP BY empName
链接地址: http://www.djcxy.com/p/7721.html

上一篇: concat MySQL function in Microsoft SQL Server 2005?

下一篇: Execute Ant Script with Ant Tasks Programmatically