subconsultas ejemplos ejecutar consulta sql group-by sybase

sql - ejemplos - select access vba



¿Cómo obtener una lista de valores en la cláusula GROUP_BY? (8)

Creo que vas a tener que usar un cursor ( http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/50501;pt=50305 )

Si tengo datos como este en una tabla

id data -- ---- 1 1 1 2 1 3 2 4 2 5 3 6 3 4

¿Cómo obtengo resultados como este en una consulta (en el servidor sybase)?

id data -- ---- 1 1, 2, 3 2 4, 5 3 6, 4


En MsSQL puede usar una función (No sé si hay algo similar en 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

Y entonces:

SELECT ID, dbo.GetDataForID(ID) as Data FROM Table GROUP BY ID


No puede hacer esto en un GROUP BY directo en SQL simple. Debe usar un cursor (o una construcción similar) para concatenar manualmente los valores de cada grupo.

  • Oracle le permite definir un agregador personalizado que haría esta concatenación en PL / SQL.
  • SQL Server le permite definir un agregador personalizado en .NET que también lo haría.
  • Sin embargo, no estoy seguro de qué opciones tiene Sybase para definir agregadores personalizados.

Han pasado algunos años desde que intenté usar la sintaxis y ya no tengo acceso a una instancia de iAnywhere, pero había una función agregada (lista) para realizar esa tarea. No puedo confirmar si LIST () todavía es compatible.

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


Sé que en MySQL hay GROUP_CONCAT y en Sybase, creo que es LIST como se indica en otra respuesta:

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


Prueba este:

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


Para PostgreSQL, usando una función similar string_agg .

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


En PL / SQL puedes hacerlo por:

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