Unir en un solo campo los datos de varias filas

Perdona
Pero ahora lo estoy probando con datos reales, y al haber varios vehículos, siempre pone los datos de equipamiento del vehículo + los datos del resto vehículos -1.
Es porque la variable del equipamiento no se inicializa a blancos cuando cambia de vehículo, o bien por que cuando cambia de vehículo, solo la primera vez pasa de coger los datos de equipamiento.
He probado a modificar tu cursor pero no veo donde hacerlo.
Podrías repasarlo e indicarme alguna solución.
Gracias
idVEh  Equipamientounido                                                                                              202     equip 202, eqip522, eqp711_1, equp711_2, eqp711, español, espa_1, eqip830_3, equip830_4
522     equip 522 1, eqip522, eqp711_1, equp711_2, eqp711, español, espa_1, eqip830_3, equip830_4
711     equip711_3, eqp711_1, equp711_2, eqp711, español, espa_1, eqip830_3, equip830_4
830     esp_2, español, espa_1, eqip830_3, equip830_4
Ok,
Con eso ya podríamos trabajar, la estructura que te presentare es manejando quiebres, bansandonos en el id de agrupación
create table Acumulate (idVeh int, Equipments varchar(2000))--tabla que acumulara
declare @idVeh int, @idVehTemp int, @Equipmiento varchar(50)
declare rs_var cursor for
   select   idVeh, Equipmiento from tabla order by 1
open rs_var
fetch next from rs_var into  @idVeh, @Equipmiento
set @idVehTemp= @idVeh
while @@fetch_status=0
begin
  if @idVehTemp= @idVeh
 begin
     if exists (select top 1 * from Acumulate where idVeh= @idVeh)
     begin  
                 update Acumulate set Equipmiento= Equipmiento+ ', '+ @Equipmiento
     end
     else
     begin
                 insert into Acumulate values (@idVeh, @Equipmiento)
     end
     set @idVehTemp= @idVeh
 end
 else
 begin
     insert into Acumulate values (@idVeh, @Equipmiento)
     set @idVehTemp= @idVeh
 end
fetch next from rs_var into @idVeh, @Equipmiento
end
close rs_var
deallocate rs_var
Esta seria la solución, disculpa si hay algún tipo de error pero desde donde contesto no tengo un sql server para hacer las pruebas, pero creo que esta ok, cualquier cosa me avisas.

1 respuesta

Respuesta
1
Sorry, mucho trabajo.
No entiendo bien que es lo qnecesitas, ¿puedes especificar como debe ser tu salida?
Hola, gracias por atenderme
Quiero pasar los datos de una tabla en la que hay varias lineas por cada id a otra tabla en la que sola haya una linea por id y en campo tenga todos los valores de las lineas de la otra tabla.
Ejemplo
(Tabla con detalle de Equipamientos "Vehiculos_Equip")
Id Equipamiento
1 ABS
2 Aire
1 radio
1 airbag
2 cierre centralizado
2 Elevalunas 3 frenos de disco 3 Spoiler
...
Y esto se debería convertir en:
(Tabla con resultados "Acumulados")
Id EquipamientoAcumuladoVehiculo
1        ABS, radio, Airbag
2        Aire, Cierre centralizado, elevalunas
3        Frenosde disco, spoiler
Con el cursor que me indicaste estaba casi conseguido pues la salida de este cursor es:
Id EquipamientoAcumuladoVehiculo
1 ABS, radio, Airbag, "cierre centralizado, elevalunas, spoiler"
2 Aire, Cierre centralizado, "elevalunas, spoiler"
3        Frenosde disco, spoiler
Como Ves en el id=1 añade equipamientos del id 2 y del id 3,
en el id 2 añade euipmientos del id 3
creo que es porque no se limpia la variable cuando cambia el id, pero no se donde esta el fallo.
Puedes echarle un vistazo y decirme algo.
Gracias por tu atención
Sorry, he tenido mucho que hacer, ¿sigues con este problema para ayudarte?
Gracias por atenderme
Si todavía lo tengo pendiente.
A ver, he revisado el código, puedes correrlo de nuevo y me comentas en caso sea necesario.
Create table Acumulate (idVeh int, Equipments varchar(2000))--tabla q acumulara
declare @idVeh int, @idVehTemp int, @Equipmiento varchar(50)
declare rs_var cursor for
   select   idVeh, Equipmiento from tabla order by 1
open rs_var
fetch next from rs_var into  @idVeh, @Equipmiento
set @idVehTemp= @idVeh
while @@fetch_status=0
begin
  if @idVehTemp= @idVeh
 begin
     if exists (select top 1 * from Acumulate where idVeh= @idVeh)
     begin  
                 update Acumulate set Equipmiento= Equipmiento+ ', '+ @Equipmiento
     end
     else
     begin
                 insert into Acumulate values (@idVeh, @Equipmiento)
     end
 end
 else
 begin
     insert into Acumulate values (@idVeh, @Equipmiento)
     set @idVehTemp= @idVeh
 end
fetch next from rs_var into @idVeh, @Equipmiento
end
close rs_var
deallocate rs_var
Gracias por el interés.
Yo también he estado dando le vueltas al tema. La solución esta es la siguiente, sobre el primer cursor hay que verificar en el uptade el id vehículo.
         update Equip_Acum set Desc_eq= Desc_eq+ ', '+ @Desc_eq where idveh=@idveh
Con esto esta solucionado.
Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas