gpt4 book ai didi

sql - 在 Microsoft SQL Server 2005 中模拟 group_concat MySQL 函数?

转载 作者:行者123 更新时间:2023-12-04 23:19:53 26 4
gpt4 key购买 nike

我正在尝试将基于 MySQL 的应用程序迁移到 Microsoft SQL Server 2005(不是自愿的,但这就是生活)。

在最初的应用程序中,我们几乎完全使用了符合 ANSI-SQL 的语句,只有一个重要的异常(exception)——我们使用了 MySQL 的 group_concat功能相当频繁。
group_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,所以请不要过多解释:)

最佳答案

没有真正简单的方法来做到这一点。不过,那里有很多想法。

Best one I've found :

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)

关于sql - 在 Microsoft SQL Server 2005 中模拟 group_concat MySQL 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55635396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com