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