Skip to content

Forum

Please or Register to create posts and topics.

Concatenare I valori di un campo

Anche io ho l'onore di inaugurare un forum, lavoro saltuariamente con i database nel mio lavoro e sabrina mi ha chiesto di fare un po' delle domande che mi hanno assillato più di qualche volta, quindi ecco la prima:

In MySql è facile concatenare il contenuto di un campo in una query raggruppata usando la funzione Group_Concat,

SELECT id_R, GROUP_CONCAT(anno) FROM myDetailsTable;

Con la query qui sopra, otteniamo tutti i valori di anno in una stringa separata da virgole raggruppati per il campo id_R

C'è un equivalente in SQL Server?

 

Ant.

Ecco la risposta alla prima domanda, grazie intanto per aver aperto il forum con una richiesta semplice ma interessante.

Abbiamo dovuto attendere fino a SQL Server 2017 (14.x) per ottenere una delle poche funzioni che invidiavo a MySql ma finalmente c'è anche per chi usa SQL Server, ecco un esempio di come si usa:

USE [NORTHWIND]

SELECT p.CategoryID
,CategoryName
,STRING_AGG(productname ,' | ') AS CategoryProducts
FROM [Products] p
LEFT OUTER JOIN categories c
ON
p.CategoryID = c.CategoryID
GROUP BY
p.CategoryID, c.CategoryName

Un esempio creato sullo storico (e sempre in voga) Northwind database che da origine al seguente risultato:

CategoryID CategoryName CategoryProducts
1 Beverages Chai | Chang | Guaraná Fantástica | Sasquatch Ale | Steeleye Stout | Côte de Blaye | Chartreuse verte ...
2 Condiments Original Frankfurter grüne Soße | Sirop d'érable | Vegie-spread | Louisiana Fiery Hot Pepper Sauce ...
3 Confections Pavlova | Teatime Chocolate Biscuits | Sir Rodney's Marmalade | Sir Rodney's Scones | NuNuCa Nuß-Nougat-Creme ...
4 Dairy Products Gudbrandsdalsost | Flotemysost | Mozzarella di Giovanni | Raclette Courdavault | Camembert Pierrot ...
5 Grains/Cereals Gustaf's Knäckebröd | Tunnbröd | Wimmers gute Semmelknödel | Filo Mix | Singaporean Hokkien Fried Mee ...
6 Meat/Poultry Perth Pasties | Tourtière | Pâté chinois | Alice Mutton | Mishi Kobe Niku | Thüringer Rostbratwurst...
7 Produce Rössle Sauerkraut | Uncle Bob's Organic Dried Pears | Tofu | Manjimup Dried Apples | Longlife Tofu...
8 Seafood Rogede sild | Spegesild | Escargots de Bourgogne | Röd Kaviar | Ikura | Konbu | Carnarvon Tigers ...

La funzione STRING_AGG prende come parametri il nome del campo di cui fare la concatenazione e il separatore da usare fra un valore e l'altro, nel mio caso ho usato il carattere pipe (|) che non è usato nelle stringhe in italiano e quindi può divenire un modo semplice per separare le stringhe da programma se fosse necessario in seguito.