Como lo consigo:
id Name Value
1 A 4
1 B 8
2 C 9
a
id Column
1 A:4, B:8
2 C:9
Como lo consigo:
id Name Value
1 A 4
1 B 8
2 C 9
a
id Column
1 A:4, B:8
2 C:9
GROUP_CONCAT()
función agregada, pero resolverlo en Microsoft SQL Server es más incómodo. Consulte la siguiente pregunta de SO para obtener ayuda: " ¿Cómo obtener registros múltiples contra un registro basado en la relación? "Respuestas:
No se necesita CURSOR, bucle WHILE ni función definida por el usuario .
Solo necesito ser creativo con FOR XML y PATH.
[Nota: esta solución solo funciona en SQL 2005 y versiones posteriores. La pregunta original no especificaba la versión en uso.]
fuente
Si es SQL Server 2017 o SQL Server Vnext, SQL Azure puede usar string_agg de la siguiente manera:
fuente
el uso de la ruta XML no se concatenará perfectamente como podría esperarse ... reemplazará "&" con "& amp;" y también se meterá con
<" and ">
... quizás algunas otras cosas, no estoy seguro ... pero puedes probar estoEncontré una solución para esto ... debes reemplazar:
con:
...o
NVARCHAR(MAX)
si eso es lo que estás usando.por qué demonios no
SQL
tiene una función agregada concatenada? Esta es una PITA.fuente
Me encontré con un par de problemas cuando he intentado convertir la sugerencia de Kevin Fairchild a trabajar con cadenas que contengan espacios y caracteres especiales (XML
&
,<
,>
), que fueron codificados.La versión final de mi código (que no responde la pregunta original pero puede ser útil para alguien) se ve así:
En lugar de usar un espacio como delimitador y reemplazar todos los espacios con comas, simplemente antepone una coma y un espacio a cada valor y luego usa
STUFF
para eliminar los dos primeros caracteres.La codificación XML se realiza automáticamente mediante la directiva TYPE .
fuente
Otra opción con Sql Server 2005 y superior
fuente
Instale los agregados SQLCLR desde http://groupconcat.codeplex.com
Luego puede escribir un código como este para obtener el resultado que solicitó:
fuente
SQL Server 2005 y versiones posteriores le permiten crear sus propias funciones agregadas personalizadas , incluso para cosas como la concatenación; consulte el ejemplo al final del artículo vinculado.
fuente
Ocho años después ... Microsoft SQL Server vNext Database Engine finalmente ha mejorado Transact-SQL para admitir directamente la concatenación de cadenas agrupadas. La versión 1.0 de Community Technical Preview agregó la función STRING_AGG y CTP 1.1 agregó la cláusula WITHIN GROUP para la función STRING_AGG.
Referencia: https://msdn.microsoft.com/en-us/library/mt775028.aspx
fuente
Esto es solo una adición a la publicación de Kevin Fairchild (muy inteligente por cierto). Lo habría agregado como comentario, pero todavía no tengo suficientes puntos :)
Estaba usando esta idea para una vista en la que estaba trabajando, sin embargo, los elementos que estaba concatenando contenían espacios. Así que modifiqué el código ligeramente para no usar espacios como delimitadores.
Nuevamente, gracias por la genial solución Kevin!
fuente
Un ejemplo sería
En Oracle puede usar la función agregada LISTAGG.
Registros originales
SQL
Resulta en
fuente
Este tipo de pregunta se hace aquí muy a menudo, y la solución dependerá mucho de los requisitos subyacentes:
https://stackoverflow.com/search?q=sql+pivot
y
https://stackoverflow.com/search?q=sql+concatenate
Por lo general, no existe una forma de hacer esto solo con SQL sin SQL dinámico, una función definida por el usuario o un cursor.
fuente
Solo para agregar a lo que dijo Cade, esto generalmente es algo de visualización frontal y, por lo tanto, debe manejarse allí. Sé que a veces es más fácil escribir algo 100% en SQL para cosas como la exportación de archivos u otras soluciones "solo SQL", pero la mayoría de las veces esta concatenación debe manejarse en su capa de visualización.
fuente
No necesito un cursor ... un bucle while es suficiente.
fuente
Seamos muy simples:
Reemplace esta línea:
Con tu consulta.
fuente
no vi ninguna respuesta de aplicación cruzada, tampoco es necesario extraer xml. Aquí hay una versión ligeramente diferente de lo que escribió Kevin Fairchild. Es más rápido y fácil de usar en consultas más complejas:
fuente
Puede mejorar el rendimiento de la siguiente manera si group by contiene principalmente un elemento:
fuente
Uso de la función Reemplazar y FOR JSON PATH
Para ver datos de muestra y más formas, haga clic aquí
fuente
Si tiene habilitado clr, puede usar la biblioteca Group_Concat de GitHub
fuente