如果我在表格中有这样的数据
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
答案 0 :(得分:12)
我知道在MySQL中有GROUP_CONCAT,在Sybase中我认为它是LIST,如另一个答案中所述:
SELECT id, LIST(data||', ')
FROM yourtable
GROUP BY id
答案 1 :(得分:5)
在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
答案 2 :(得分:3)
在PL / SQL中,您可以通过以下方式完成:
SELECT id, LISTAGG(data, ',') WITHIN GROUP(ORDER BY 0) "data"
FROM yourtable
GROUP BY id
答案 3 :(得分:2)
你不能在普通的SQL中直接使用GROUP BY。您必须使用游标(或类似的构造)手动连接每个组中的值。
答案 4 :(得分:2)
对于PostgreSQL,使用类似的函数string_agg。
SELECT id, string_agg(data, ',')
FROM yourtable
GROUP BY id
答案 5 :(得分:1)
我认为你将不得不使用游标(http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/50501;pt=50305)
答案 6 :(得分:1)
在mysql中,使用
SELECT id, GROUP_CONCAT(data)
FROM yourtable
GROUP BY id
或使用您的自定义分隔符:
SELECT id, GROUP_CONCAT(data SEPARATOR ', ')
FROM yourtable
GROUP BY id
请参见GROUP_CONCAT。
答案 7 :(得分:0)
自从我尝试使用语法已经过去几年了,我不再能够访问iAnywhere实例,但是有一个聚合函数(list)来执行这样的任务。我无法确认是否仍然支持LIST()。
SELECT id,
LIST(data)
FROM table
GROUP BY id
答案 8 :(得分:0)
试试这个:
SELECT id,
GROUP_CONCAT(data)
FROM table
GROUP BY id
答案 9 :(得分:0)
在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
答案 10 :(得分:0)
对于Presto,请使用array_agg
SELECT id, array_agg(data)
FROM yourtable
GROUP BY id
答案 11 :(得分:0)
对于 SQL 服务器:
SELECT id, STRING_AGG(data, ',')
FROM your_table
GROUP BY id;
答案 12 :(得分:0)
对于 SparkSQL(例如查询 AWS Athena 时):
SELECT id, ARRAY_JOIN(ARRAY_AGG(data), ',')
FROM your_table
GROUP BY id;