Firebird 2.5 - SQL中STUFF的等效函数(Oracle中的MySql/LISTAGG中的GROUP_CONCAT)

Phi*_*hil 9 sql database firebird

有谁知道Firebird 2.5是否具有类似于SQL中"STUFF"功能的功能?我有一个包含父用户记录的表,另一个表包含与父进程相关的子用户记录.我希望能够在不必使用第二个查询的情况下拉出用户所拥有的"ROLES"的逗号分隔字符串,循环返回给定ID的值并自己创建字符串.

我搜索过任何其他相关问题,但没有找到任何问题.这个链接字符串相当于Sum连接的问题基本上也是我想做的,但是使用Firebird 2.5数据库.

Stu*_*tLC 14

看起来你很幸运 - Firebird 2.1有一个LIST()聚合函数,就像GROUP_CONCAT在MySql中一样,允许这样的查询:

SELECT p.Name, LIST(c.Name, ', ')
FROM parent p INNER JOIN child c on c.parentid = p.parentid
GROUP by p.Name;
Run Code Online (Sandbox Code Playgroud)

编辑,重新订购

在应用LIST聚合函数之前,您可以通过在派生表中预先排序数据来影响排序,如下所示:

SELECT x.ParentName, LIST(x.ChildName, ', ')
FROM 
(
  SELECT p.Name as ParentName, c.Name as ChildName
  FROM parent p INNER JOIN child c on c.parentid = p.parentid
  ORDER BY c.Name DESC
) x
GROUP by x.ParentName;
Run Code Online (Sandbox Code Playgroud)