SUPERCAT.DEV

Benvenut* sul mio blog

TSQL

Quando non hai string_agg

31-10-2023

Quando la versione di sql server non supporta le funzioni di concatenazione

SELECT DISTINCT
	STUFF(
		(
			SELECT 
				', ' + RTRIM(REGIONE)
			FROM 
				TABELLA_REGIONI
			ORDER BY 
				REGIONE
			FOR XML PATH ('')
		)
	, 1, 2, '') AS ELENCO_REGIONI
FROM TABELLA_REGIONI

Ottengo

ABRUZZO, BASILICATA, CALABRIA, CAMPANIA, EMILIA ROMAGNA, FRIULI VENEZIA GIULIA, LAZIO, LIGURIA, LOMBARDIA, MARCHE, MOLISE, PIEMONTE, PUGLIA, SARDEGNA, SICILIA, TOSCANA, TRENTINO ALTO ADIGE, UMBRIA, VALLE D'AOSTA, VENETO

Oppure all'interno di una altra query se voglio tutti gli utenti che usano quella macchina

SELECT DISTINCT 
	L.MACCHINA
	,
	STUFF(
	REPLACE(
	REPLACE(
		(
			SELECT DISTINCT
				', ' + UPPER(I.UTENTE) AS X
			FROM 
				[Log] AS I
			WHERE 
				    I.MACCHINA = L.MACCHINA
			FOR XML PATH ('')
		)
	, '<X>', '')
	, '</X>', '')
	, 1, 2, '')
	AS UTENTI
FROM 
	[Log] AS L
GROUP BY
	L.MACCHINA
ORDER BY
	L.MACCHINA

Ottengo

MACH01 | PIPPO, PLUTO, PAPERINO
MACH02 | PIPPO
MACH03 | PIPPO, PAPERINO
...