sql - 与 SQL 中的 STUFF 等效的函数(MySQL 中的 GROUP_CONCAT/Oracle 中的 LISTAGG)

标签 sql firebird string-aggregation

有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能?

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

我已经搜索过任何其他相关问题,但没有找到。 这个链接的问题string equivalent of Sum to concatenate基本上也是我想做的,但是使用 Firebird 2.5 数据库。

最佳答案

看起来您很幸运 - Firebird 2.1 引入了一个 LIST() aggregate function它的工作方式类似于 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;

关于sql - 与 SQL 中的 STUFF 等效的函数(MySQL 中的 GROUP_CONCAT/Oracle 中的 LISTAGG),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26635451/

相关文章:

python - 将 kinterbasdb 与 py2exe 一起使用

mysql - 最快和/或最简单的方法是什么?

sql - 如何使用 update 和 sum() 函数更新 ms access 数据库表?

sql - 我可以在 Where 子句中使用 Firebird DateAdd 函数吗?

SQL 查询连接 Oracle 中多行的列值

mysql - 获取一行中 2 行值的结果

SQL Server 相当于 GROUP_CONCAT()

java - 使用 criteria.list() 来确定返回的行数是否有效?

c# - System.IndexOutOfRangeException 错误 SQL SELECT 查询无法读取从我的表中选择的数据

character-encoding - Firebird默认字符集