繁体   English   中英

SQL 中 STUFF 的等效函数(MySSQL 中的 GROUP_CONCAT / Oracle 中的 LISTAGG)

[英]Equivalent function to STUFF in SQL (GROUP_CONCAT in MySSQL / LISTAGG in Oracle)

有谁知道 Firebird 2.5 是否有类似于 SQL 中的“STUFF”函数的函数?

我有一个包含父用户记录的表,另一个包含与父级相关的子用户记录的表。 我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而无需使用第二个查询,遍历给定 ID 返回的值并自己创建字符串。

我已经搜索了任何其他相关问题,但没有找到。 这个链接字符串中的问题相当于 Sum to concatenate基本上也是我想要做的,但是使用 Firebird 2.5 数据库。

看起来你很幸运 - Firebird 2.1 引入了一个LIST()聚合函数,它的工作方式类似于 MySQL 中的GROUP_CONCAT ,它允许这样的查询:

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

编辑,重新订购

在应用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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM