49

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

id   data
--   ----
1    1
1    2
1    3
2    4
2    5
3    6
3    4

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

id   data
--   ----
1    1, 2, 3
2    4, 5
3    6, 4
4

13 回答 13

14

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

SELECT id, LIST(data||', ')
FROM yourtable
GROUP BY id
于 2009-01-30T03:37:09.443 回答
12

在 mysql 中,使用

SELECT id, GROUP_CONCAT(data)
 FROM yourtable
 GROUP BY id

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

SELECT id, GROUP_CONCAT(data SEPARATOR ', ')
 FROM yourtable
 GROUP BY id

GROUP_CONCAT

于 2019-01-10T09:19:29.697 回答
11

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

SELECT id, string_agg(data, ',')
FROM yourtable
GROUP BY id
于 2016-02-27T01:26:56.870 回答
6

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

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

接着:

SELECT ID, dbo.GetDataForID(ID) as Data
FROM Table
GROUP BY ID
于 2009-01-29T13:56:10.597 回答
6

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

SELECT id, LISTAGG(data, ',') WITHIN GROUP(ORDER BY 0) "data"
  FROM yourtable
 GROUP BY id
于 2017-09-18T10:02:44.833 回答
3

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

  • Oracle 允许您定义一个自定义聚合器,该聚合器将在 PL/SQL 中执行此连接。
  • SQL Server 允许您在 .NET 中定义一个自定义聚合器,它也可以执行此操作。
  • 不过,我不确定 Sybase 有哪些用于定义自定义聚合器的选项。
于 2009-01-29T13:40:08.257 回答
3

对于 SQL 服务器:

SELECT id, STRING_AGG(data, ',')
FROM your_table
GROUP BY id;
于 2021-04-08T11:46:27.210 回答
1

试试这个:

SELECT id,
       GROUP_CONCAT(data)
FROM   table
GROUP BY id
于 2014-02-26T18:37:23.180 回答
1

我认为您将不得不使用光标(http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/50501;pt=50305

于 2009-01-29T13:40:55.463 回答
1

对于 Presto,使用array_agg

SELECT id, array_agg(data)
FROM yourtable
GROUP BY id
于 2020-11-19T21:36:52.647 回答
1

在 SQL Server 中:

select distinct b.id, data=STUFF((select ',' +convert(varchar,id)
from yourtable a
where a.id=b.id
for xml path ('')),1,1,'')
from yourtable b
于 2019-02-11T15:10:54.510 回答
0

自从我尝试使用该语法已经有几年了,我不再可以访问 iAnywhere 实例,但是有一个聚合函数(列表)可以完成这样的任务。我无法确认 LIST() 是否仍受支持。

SELECT id,
       LIST(data)
FROM   table
GROUP BY id
于 2009-01-29T13:52:20.200 回答
0

对于 SparkSQL(例如查询 AWS Athena 时):

SELECT id, ARRAY_JOIN(ARRAY_AGG(data), ',')
FROM your_table
GROUP BY id;
于 2021-05-30T13:03:31.400 回答