Если у меня есть такие данные в таблице
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
Если у меня есть такие данные в таблице
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
Я знаю, что в MySQL есть GROUP_CONCAT и в Sybase я думаю, что LIST, как указано в другом ответе:
SELECT id, LIST(data||', ')
FROM yourtable
GROUP BY id
В 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
Вы не можете сделать это в прямой GROUP BY в просто-ванильном SQL. Вы должны использовать курсор (или аналогичную конструкцию), чтобы объединить значения в каждой группе вручную.
Для PostgreSQL, используя аналогичную функцию string_agg.
SELECT id, string_agg(data, ',')
FROM yourtable
GROUP BY id
В PL/SQL вы можете сделать это:
SELECT id, LISTAGG(data, ',') WITHIN GROUP(ORDER BY 0) "data"
FROM yourtable
GROUP BY id
Я думаю, вам придется использовать курсор (http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/50501;pt=50305)
Прошло несколько лет с тех пор, как я попытался использовать синтаксис, и у меня больше нет доступа к экземпляру iAnywhere, но для выполнения такой задачи была сводная функция (список). Я не могу подтвердить, поддерживает ли LIST().
SELECT id,
LIST(data)
FROM table
GROUP BY id
Попробуйте следующее:
SELECT id,
GROUP_CONCAT(data)
FROM table
GROUP BY id
В MySQL используйте
SELECT id, GROUP_CONCAT(data)
FROM yourtable
GROUP BY id
или используйте свой собственный разделитель:
SELECT id, GROUP_CONCAT(data SEPARATOR ', ')
FROM yourtable
GROUP BY id
см. GROUP_CONCAT.