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