Tabla
IDENTIFICACIÓN
Fecha
Modelo
Precio
6255
2018-01-31
HZH98CC
435.34
6256
2018-01-31
CVVCDE7
23.24
6257
2018-01-31
WWRT423
24.24
6258
2018-02-14
DT4
43.23
6259
2018-02-14
D42C
243.2
¿Cómo puedo utilizar la consulta/vista para obtener todos los registros de la tabla de base de datos y combinar filas con la misma fecha en una sola fila? No estoy seguro de cómo empezar. Probé FOR XML pero no obtengo el resultado que quiero
SELECT DISTINCT transactions.[id],
SUBSTRING(
(
SELECT ','+ transactions.model AS [text()]
FROM transactions
FOR XML PATH ('')
), 2, 1000) transactions
FROM transactions
Que regresa
IDENTIFICACIÓN
Modelo
6255
HZH98CC,CVVCDE7,WWRT423,DT4,D42C
Resultado esperado
IDENTIFICACIÓN
Fecha
Modelo
Precio
6255,6256,6257
2018-01-31
HZH98CC,CVVCDE7,WWRT423
435,34,23,24,24,24
6258,6259
2018-02-14
DT4,D42C
43,23.243,2
¿Es esto posible de alguna manera o tengo que hacerlo?
Select distinct [date]
From transactions Order by [date]
y usar las fechas resultantes para SELECCIONAR la coincidenciag filas y combinarlas en el código más adelante?
Necesito que todas las celdas de las filas coincidentes (es decir, filas con la misma fecha) se concatenen en la celda de esa columna.
¿Esto responde a tu pregunta? ¿Cómo concatenar texto de varias filas en una sola cadena de texto en el servidor SQL?
-Yong Shun
27 de marzo de 2021 a las 4:05
2
Puedes usar esto. https://stackoverflow.com/questions/27712374/how-to-convert-multiple-rows-to-one-row-in-sql-server
- Gowthaman
27 de marzo de 2021 a las 4:06
1
Perfeccione (o simplifique) su ejemplo de resultado esperado. Tal como están las cosas, no tiene sentido agregar las cadenas de modelos e incluir aleatoriamente solo uno de sus precios.
AlanK
27 de marzo de 2021 a las 4:28
El enlace @Gowthaman puede ser el indicado. Lo probaré y volveré
-XcOder
27 de marzo de 2021 a las 4:49
------------------------------------
Desde SQL Server 2017, SQL Server admite string_agg():
select date,
string_agg(id, ',') within group (order by id) as ids,
string_agg(model, ',') within group (order by id) as model,
string_agg(price, ',') within group (order by id) as prices
from transactions
group by date;
En versiones anteriores de SQL Server, debe utilizar la solución alternativa XML.
------------------------------------
EjemploEstamos usando XML para versiones anteriores de SQL Server que no tienen la función string_agg.
DECLARE @t TABLE
(
id varchar(10),
date date,
model varchar(10),
price varchar(10)
)
INSERT INTO @t
select 6255 ,'2018-01-31', 'HZH98CC', 435.34 union all
select 6256 ,'2018-01-31', 'CVVCDE7', 23.24 union all
select 6257 ,'2018-01-31', 'WWRT423', 24.24 union all
select 6258 ,'2018-02-14', 'DT4', 43.23 union all
select 6259 ,'2018-02-14', 'D42C', 243.2;
SELECT
stuff( ( SELECT ','+ [id] FROM @t WHERE date = t1.date FOR XML PATH('')
),1,1,'') id,
date,
stuff( ( SELECT ','+ [model] FROM @t WHERE date = t1.date FOR XML PATH('')
),1,1,'') model,
stuff( ( SELECT ','+ [price] FROM @t WHERE date = t1.date FOR XML PATH('')
),1,1,'') price
FROM (SELECT distinct date FROM @t ) t1