stuff - string_agg sql server 2008
AgregaciĆ³n de cadenas agrupadas/LISTAGG para SQL Server (2)
Estoy seguro de que me han preguntado esto pero no puedo encontrar los términos de búsqueda adecuados.
Dado un esquema como este:
| CarMakeID | CarMake
------------------------
| 1 | SuperCars
| 2 | MehCars
| CarMakeID | CarModelID | CarModel
-----------------------------------------
| 1 | 1 | Zoom
| 2 | 1 | Wow
| 3 | 1 | Awesome
| 4 | 2 | Mediocrity
| 5 | 2 | YoureSettling
Quiero producir un conjunto de datos como este:
| CarMakeID | CarMake | CarModels
---------------------------------------------
| 1 | SuperCars | Zoom, Wow, Awesome
| 2 | MehCars | Mediocrity, YoureSettling
¿Qué hago en lugar de ''AGG'' para cadenas en SQL Server en la siguiente consulta de estilo?
SELECT *,
(SELECT AGG(CarModel)
FROM CarModels model
WHERE model.CarMakeID = make.CarMakeID
GROUP BY make.CarMakeID) as CarMakes
FROM CarMakes make
Si es SQL Server 2017 o SQL Server VNext, la base de datos SQL de Azure puede usar String_agg como se muestra a continuación:
SELECT make.CarMakeId, make.CarMake,
CarModels = string_agg(model.CarModel, '', '')
FROM CarModels model
INNER JOIN CarMakes make
ON model.CarMakeId = make.CarMakeId
GROUP BY make.CarMakeId, make.CarMake
Salida:
+-----------+-----------+---------------------------+
| CarMakeId | CarMake | CarModels |
+-----------+-----------+---------------------------+
| 1 | SuperCars | Zoom, Wow, Awesome |
| 2 | MehCars | Mediocrity, YoureSettling |
+-----------+-----------+---------------------------+
http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/
Es un problema interesante en Transact SQL, para el cual hay una serie de soluciones y un debate considerable. ¿Cómo se hace para producir un resultado resumido en el que una columna de distinción de cada fila en cada categoría particular aparece en una columna "agregada"? Una forma sencilla e intuitiva de mostrar datos es sorprendentemente difícil de lograr. Anith Sen ofrece un resumen de diferentes maneras y ofrece palabras de precaución sobre la que usted elige ...