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.
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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP