Pregunta: Deseo escribir una función de agregado personalizada que concatene una cadena en un grupo.Función de agregado personalizado (concat) en SQL Server
Así que yo puedo hacer un
SELECT SUM(FIELD1) as f1, MYCONCAT(FIELD2) as f2
FROM TABLE_XY
GROUP BY FIELD1, FIELD2
Todo lo que encontramos es CRL funciones de agregado de SQL, pero necesito SQL, sin CLR.
Edición: 1
La consulta debería tener este aspecto:
SELECT SUM(FIELD1) as f1, MYCONCAT(FIELD2) as f2
FROM TABLE_XY
GROUP BY FIELD0
Edición 2:
Es cierto que no es posible sin CLR.
Sin embargo, la respuesta de subselección de un espectador se puede modificar para que no codifique XML los caracteres especiales.
El cambio sutil para esto es agregar esto después "para la trayectoria de XML": ,
TYPE
).value('.[1]', 'nvarchar(MAX)')
Aquí algunos ejemplos
DECLARE @tT table([A] varchar(200), [B] varchar(200));
INSERT INTO @tT VALUES ('T_A', 'C_A');
INSERT INTO @tT VALUES ('T_A', 'C_B');
INSERT INTO @tT VALUES ('T_B', 'C_A');
INSERT INTO @tT VALUES ('T_C', 'C_A');
INSERT INTO @tT VALUES ('T_C', 'C_B');
INSERT INTO @tT VALUES ('T_C', 'C_C');
SELECT
A AS [A]
,
(
STUFF
(
(
SELECT DISTINCT
', ' + tempT.B AS wtf
FROM @tT AS tempT
WHERE (1=1)
--AND tempT.TT_Status = 1
AND tempT.A = myT.A
ORDER BY wtf
FOR XML PATH, TYPE
).value('.[1]', 'nvarchar(MAX)')
, 1, 2, ''
)
) AS [B]
FROM @tT AS myT
GROUP BY A
SELECT
(
SELECT
',äöü<>' + RM_NR AS [text()]
FROM T_Room
WHERE RM_Status = 1
ORDER BY RM_NR
FOR XML PATH('')
) AS XmlEncodedNoNothing
,
SUBSTRING
(
(
SELECT
',äöü<>' + RM_NR AS [data()]
FROM T_Room
WHERE RM_Status = 1
ORDER BY RM_NR
FOR XML PATH('')
)
,2
,10000
) AS XmlEncodedSubstring
,
(
STUFF
(
(
SELECT ',äöü<>' + RM_NR + CHAR(10)
FROM T_Room
WHERE RM_Status = 1
ORDER BY RM_NR
FOR XML PATH, TYPE
).value('.[1]', 'nvarchar(MAX)')
, 1, 1, ''
)
) AS XmlDecodedStuffInsteadSubstring
En el caso de su código de ejemplo sólo habrá un valor para CAMPO2 de todos modos (GROUP BY), de modo que no es necesario la función. Supongo que tu ejemplo es incorrecto. – sqlvogel
Ahahaha, bien, maldita sea, tienes razón. Field0 sería un UID (group by), field1 y field2 no debería estar en la cláusula group ... –