如何获取GROUP_BY子句中的值列表?

Jag*_*mal 28 sql sybase group-by

如果我在表格中有这样的数据

id   data
--   ----
1    1
1    2
1    3
2    4
2    5
3    6
3    4
Run Code Online (Sandbox Code Playgroud)

如何在查询中(在sybase服务器上)获得这样的结果?

id   data
--   ----
1    1, 2, 3
2    4, 5
3    6, 4
Run Code Online (Sandbox Code Playgroud)

lpf*_*eau 13

我知道在MySQL中有GROUP_CONCAT,在Sybase中我认为它是LIST,如另一个答案中所述:

SELECT id, LIST(data||', ')
FROM yourtable
GROUP BY id
Run Code Online (Sandbox Code Playgroud)


小智 9

对于 PostgreSQL,使用类似的函数string_agg

SELECT id, string_agg(data, ',')
FROM yourtable
GROUP BY id
Run Code Online (Sandbox Code Playgroud)


Yan*_*Pak 7

在 PL/SQL 中,您可以通过以下方式完成:

SELECT id, LISTAGG(data, ',') WITHIN GROUP(ORDER BY 0) "data"
  FROM yourtable
 GROUP BY id
Run Code Online (Sandbox Code Playgroud)


pup*_*lpg 6

在 mysql 中,使用

SELECT id, GROUP_CONCAT(data)
 FROM yourtable
 GROUP BY id
Run Code Online (Sandbox Code Playgroud)

或使用您的自定义分隔符:

SELECT id, GROUP_CONCAT(data SEPARATOR ', ')
 FROM yourtable
 GROUP BY id
Run Code Online (Sandbox Code Playgroud)

GROUP_CONCAT


小智 6

对于 SQL 服务器:

SELECT id, STRING_AGG(data, ',')
FROM your_table
GROUP BY id;
Run Code Online (Sandbox Code Playgroud)


Edu*_*eni 5

在MsSQL中你可以使用一个函数(不知道在SyBase中是否有类似的somenthing)

CREATE FUNCTION [dbo].[GetDataForID]
(
    @ID int
)
RETURNS varchar(max)
AS
BEGIN
    declare @output varchar(max)
    select @output = COALESCE(@output + ', ', '') + data
    from table
    where ID = @ID

    return @output
END
GO
Run Code Online (Sandbox Code Playgroud)

然后:

SELECT ID, dbo.GetDataForID(ID) as Data
FROM Table
GROUP BY ID
Run Code Online (Sandbox Code Playgroud)


Dav*_*kle 3

您无法在普通 SQL 中直接使用 GROUP BY 来执行此操作。您必须使用游标(或类似的构造)手动连接每个组中的值。

  • Oracle 允许您定义一个自定义聚合器,它将在 PL/SQL 中执行此串联操作。
  • SQL Server 允许您在 .NET 中定义自定义聚合器,它也可以执行此操作。
  • 不过,我不确定 Sybase 有哪些用于定义自定义聚合器的选项。