w3schools multiples funcion ejemplos ejemplo datos consultas columnas campos agrupar agregado sql-server sql-server-2008 tsql

sql-server - multiples - pivot sql w3schools



SQL Server: combina múltiples filas en una fila (5)

Tengo una consulta SQL como esta;

SELECT * FROM Jira.customfieldvalue WHERE CUSTOMFIELD = 12534 AND ISSUE = 19602

Y esos son los resultados;

Lo que quiero es; mostrando en una fila (celda) combinado todos los STRINGVALUE de STRINGVALUE y se separan con una coma. Me gusta esto;

SELECT --some process with STRINGVALUE-- FROM Jira.customfieldvalue WHERE CUSTOMFIELD = 12534 AND ISSUE = 19602 Araç Listesi (C2, K1 vb.Belgeler; yoksa Ruhsat Fotokopileri), Min. 5 araç plakası için İnternet Sorgusu, Son 3 Yıla Ait Onaylı Yıl Sonu Bilanço + Gelir Tablosu, Son Yıl (Yıl Sonuna ait) Detay Mizanı, İçinde Bulunduğumuz Yıla ait Ara Dönem Geçici Vergi Beyannamesi, Bayi Yorum E-Maili, Proforma Fatura

¿Cómo puedo hacer eso?


Creo que para las bases de datos que soportan la función listagg , puedes hacer:

select id, issue, customfield, parentkey, listagg(stingvalue, '','') within group (order by id) from jira.customfieldvalue where customfield = 12534 and issue = 19602 group by id, issue, customfield, parentkey


El uso de la función incorporada de MySQL group_concat () será una buena opción para obtener el resultado deseado. La sintaxis será -

SELECT group_concat(STRINGVALUE) FROM Jira.customfieldvalue WHERE CUSTOMFIELD = 12534 AND ISSUE = 19602

Antes de ejecutar el comando anterior, asegúrese de aumentar el tamaño de group_concat_max_len, de lo contrario, es posible que la salida completa no encaje en esa celda.

Para establecer el valor de group_concat_max_len, ejecute el siguiente comando:

SET group_concat_max_len = 50000;

Puede cambiar el valor 50000 en consecuencia, lo aumenta a un valor más alto según sea necesario.


Hay un método conveniente para esto en MySql llamado GROUP_CONCAT. No existe un equivalente para SQL Server, pero puede escribir el suyo con SQLCLR. Afortunadamente, someone ya lo hizo por ti.

Su consulta se convierte en esto (que por cierto es una sintaxis mucho más agradable):

SELECT CUSTOMFIELD, ISSUE, dbo.GROUP_CONCAT(STRINGVALUE) FROM Jira.customfieldvalue WHERE CUSTOMFIELD = 12534 AND ISSUE = 19602 GROUP BY CUSTOMFIELD, ISSUE

Pero tenga en cuenta que este método es bueno para un máximo de 100 filas dentro de un grupo . Más allá de eso, tendrás grandes problemas de rendimiento. Los agregados SQLCLR tienen que serializar cualquier resultado intermedio y eso acumula rápidamente un montón de trabajo. ¡Mantén esto en mente!

Curiosamente, FOR XML no sufre el mismo problema, sino que utiliza esa sintaxis horrenda.


Hay varios métodos.

Si solo desea que se devuelva el valor de cadena consolidado, este es un buen enfoque rápido y fácil

DECLARE @combinedString VARCHAR(MAX) SELECT @combinedString = COALESCE(@combinedString + '', '', '''') + stringvalue FROM jira.customfieldValue WHERE customfield = 12534 AND ISSUE = 19602 SELECT @combinedString as StringValue

Que devolverá tu cadena combinada.

También puede probar uno de los métodos XML, por ejemplo

SELECT DISTINCT Issue, Customfield, StringValues FROM Jira.customfieldvalue v1 CROSS APPLY ( SELECT StringValues + '','' FROM jira.customfieldvalue v2 WHERE v2.Customfield = v1.Customfield AND v2.Issue = v1.issue ORDER BY ID FOR XML PATH('''') ) D ( StringValues ) WHERE customfield = 12534 AND ISSUE = 19602


Puede lograr esto es combinar For XML Path y STUFF de la siguiente manera:

SELECT (STUFF(( SELECT '', '' + StringValue FROM Jira.customfieldvalue WHERE CUSTOMFIELD = 12534 AND ISSUE = 19602 FOR XML PATH('''') ), 1, 2, '''') ) AS StringValue