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)
在 PL/SQL 中,您可以通过以下方式完成:
SELECT id, LISTAGG(data, ',') WITHIN GROUP(ORDER BY 0) "data"
FROM yourtable
GROUP BY id
Run Code Online (Sandbox Code Playgroud)
在 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)
小智 6
对于 SQL 服务器:
SELECT id, STRING_AGG(data, ',')
FROM your_table
GROUP BY id;
Run Code Online (Sandbox Code Playgroud)
在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)
您无法在普通 SQL 中直接使用 GROUP BY 来执行此操作。您必须使用游标(或类似的构造)手动连接每个组中的值。