Im utilizando el código de this MSDN page para crear un agregado definido por el usuario para concatenar cadenas con group by's
en el servidor SQL. Uno de mis requisitos es que el orden de los valores concatenados sea el mismo que en la consulta. Por ejemplo:¿Se ha conservado el orden agregado de valores definidos por el usuario de SQL?
Value Group
1 1
2 1
3 2
4 2
Usando consulta
SELECT
dbo.Concat(tbl.Value) As Concat,
tbl.Group
FROM
(SELECT TOP 1000
tblTest.*
FROM
tblTest
ORDER BY
tblTest.Value) As tbl
GROUP BY
tbl.Group
consecuencia:
Concat Group
"1,2" 1
"3,4" 2
El resultado parece venir siempre fuera correcto y como se esperaba, pero que me encontré con this page que indica que la orden no está garantizada y que el atributo SqlUserDefinedAggregateAttribute.IsInvariantToOrder
solo está reservado para uso futuro.
Entonces mi pregunta es: ¿es correcto suponer que los valores concatenados en la cadena pueden terminar en cualquier orden?
Si ese es el caso, ¿por qué el código de ejemplo en la página de MSDN usa el atributo IsInvariantToOrder
?
No se puede responder a su pregunta MS, pero 'GROUP_CONCAT' le permite ser determinista sobre la concatenación. –
@kerrek - tenga en cuenta que esto está etiquetado 'SQL Server' no' MySQL' – JNK
Me temo que no hay 'GROUP_CONCAT' en SQL Server 2008 – Magnus