TransWikia.com

Unir varios registros en un solo campo SQL Server

Stack Overflow en español Asked by Martin Rangel Hernandez on December 18, 2021

estoy tratando de unir varios registros tipo INT en un solo campo, un ejemplo de como esta la tabla:

EmpresaID   recepcion
  1           4598
  1           4599
  1           4600

Y requiero que quede asi:

EmpresaID   recepcion
   1       4598,4599,4600
    

ya trate con STUFF y este es el codigo:

SELECT 
T2.EmpresaID, 
STUFF(
    (
        SELECT ', '+ CAST(RecepcionID AS varchar(10))
        FROM erDo_Recepciones T1
        WHERE T1.EmpresaID=T2.EmpresaID FOR xml path ('')
    ), 1, 0, ''
) AS RECEPCION

FROM erDo_Recepciones T2 
WHERE T2.RecepcionID BETWEEN 4598 AND 4600 
AND T2.EmpresaID=1 
AND T2.AlmacenID='CEDIS'

Pero me arroja lo siguiente:

EmpresaID   recepcion
   1          ,1,2,3,4,5,6,...

Muchas gracias y saludos cordiales.

One Answer

Puedes usar STRING_AGGR() en reemplazo de la parte donde usas STUFF(...)

SELECT 
T2.EmpresaID, 
( SELECT STRING_AGG(CAST(RecepcionID AS varchar(10)), ',') AS result
    FROM erDo_Recepciones T1
    WHERE T1.EmpresaID=T2.EmpresaID
) AS RECEPCION
FROM erDo_Recepciones T2 
WHERE T2.RecepcionID BETWEEN 4598 AND 4600 
AND T2.EmpresaID=1 
AND T2.AlmacenID='CEDIS'

https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-ver15

Para versiones anteriores a sql-2017 puedes user dicha construction con STUFF() y SELECT, pero el parametro de STUFF(text,start,length,replacement) para remover el primer character sería (notese el parametro length=1 y quitar el espacio en SELECT ', ' :

SELECT T2.EmpresaID, STUFF(
(SELECT ','+ CAST(RecepcionID AS varchar(10))
FROM erDo_Recepciones T1
WHERE T1.EmpresaID=T2.EmpresaID FOR xml path ('')),1,1,'') AS RECEPCION
FROM erDo_Recepciones T2 WHERE T2.RecepcionID BETWEEN 4598 AND 4600 AND T2.EmpresaID=1 AND T2.AlmacenID='CEDIS'

Answered by F.Igor on December 18, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP