Подтвердить что ты не робот

Как получить список значений в предложении GROUP_BY?

Если у меня есть такие данные в таблице

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
4b9b3361

Ответ 1

Я знаю, что в MySQL есть GROUP_CONCAT и в Sybase я думаю, что LIST, как указано в другом ответе:

SELECT id, LIST(data||', ')
FROM yourtable
GROUP BY id

Ответ 2

В 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

Ответ 3

Вы не можете сделать это в прямой GROUP BY в просто-ванильном SQL. Вы должны использовать курсор (или аналогичную конструкцию), чтобы объединить значения в каждой группе вручную.

  • Oracle позволяет определить пользовательский агрегатор, который будет выполнять эту конкатенацию в PL/SQL.
  • SQL Server позволяет определить пользовательский агрегатор в .NET, который также сделает это.
  • Я не уверен, что параметры Sybase для определения настраиваемых агрегаторов.

Ответ 4

Для PostgreSQL, используя аналогичную функцию string_agg.

SELECT id, string_agg(data, ',')
FROM yourtable
GROUP BY id

Ответ 5

В PL/SQL вы можете сделать это:

SELECT id, LISTAGG(data, ',') WITHIN GROUP(ORDER BY 0) "data"
  FROM yourtable
 GROUP BY id

Ответ 7

Прошло несколько лет с тех пор, как я попытался использовать синтаксис, и у меня больше нет доступа к экземпляру iAnywhere, но для выполнения такой задачи была сводная функция (список). Я не могу подтвердить, поддерживает ли LIST().

SELECT id,
       LIST(data)
FROM   table
GROUP BY id

Ответ 8

Попробуйте следующее:

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

Ответ 9

В MySQL используйте

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

или используйте свой собственный разделитель:

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

см. GROUP_CONCAT.