我正在尝试将基于MySQL的应用程序迁移到Microsoft SQL Server 2005(不是选择,而是生活).
在原始应用程序中,我们几乎完全使用符合ANSI-SQL的语句,但有一个重要的例外 - 我们group_concat经常使用MySQL的函数.
group_concat顺便说一下,这样做:给出一张表,比如说,员工姓名和项目......
SELECT empName, projID FROM project_members;
Run Code Online (Sandbox Code Playgroud)
收益:
ANDY | A100
ANDY | B391
ANDY | X010
TOM | A100
TOM | A510
Run Code Online (Sandbox Code Playgroud)
...这是你用group_concat得到的:
SELECT
empName, group_concat(projID SEPARATOR ' / ')
FROM
project_members
GROUP BY
empName;
Run Code Online (Sandbox Code Playgroud)
收益:
ANDY | A100 / B391 / X010
TOM | A100 / A510
Run Code Online (Sandbox Code Playgroud)
所以我想知道的是:是否有可能在SQL Server中编写用户定义的函数来模拟其功能group_concat?
我几乎没有使用UDF,存储过程或类似的东西的经验,只是直接的SQL,所以请错误地说太多的解释:)
我需要在表上编写一个sql查询,以便结果将具有group by列以及带有逗号分隔符的聚合列.
我的表格将采用以下格式
|`````````|````````|
| ID | Value |
|_________|________|
| 1 | a |
|_________|________|
| 1 | b |
|_________|________|
| 2 | c |
|_________|________|
Run Code Online (Sandbox Code Playgroud)
预期结果应采用以下格式
|`````````|````````|
| ID | Value |
|_________|________|
| 1 | a,b |
|_________|________|
| 2 | c |
|_________|________|
Run Code Online (Sandbox Code Playgroud) sql sql-server select aggregate-functions sql-server-group-concat
我在表格中有一个值,如下所示.我需要generation times为每个获取逗号分隔值subscriptionID.
6519 NULL
6616 NULL
6617 NULL
6618 9:00:00
6618 17:00:00
6634 NULL
6698 0:00:00
Run Code Online (Sandbox Code Playgroud)
我需要如下结果
6519 NULL
6616 NULL
6617 NULL
6618 9:00, 17:00
6634 NULL
6698 0:00:00
Run Code Online (Sandbox Code Playgroud)
你注意到subscriptionID 6618有两代时间,所以我必须把它们用逗号','分隔开来.请给我一些建议如何编写T-sql语句.