Inicio > SQL Server > brownsea > Unir en un solo campo los datos de varias filas

Unir en un solo campo los datos de varias filas

Experto:
Usuario:
Fecha: 05/11/2009
Valoración: (5,00 sobre 5) Categoría: SQL Server
03/11/2009
abnuevo, usuario preguntando en SQL Server
Usuario
Buenas tardes
Tengo una tabla con los siguientes datos
idVeh  Equipmiento
1          abs
1           aire acondicinado
1           radiocd
2           lunas tintadas
2           antirobo
3           cierre centralizado
.....
como prodria hacer en SQL server 2000
para que me aparacieran en otra tabla con esta extructura
idVeh    UnionEquipamiento
1          abs, aire acondicionado, radiocd
2          lunas tintadas, sntirobo,
3           cierre centralizado
Gracias anticipadas por vuestra colaboracion
03/11/2009
abnuevo, experto respondiendo en SQL Server
Experto
Hola,
Por lo que comentas, debes tener primero un patron, es decir, saber cada cuanto quieres acumular, por ejm, quiero acumular de dos en dos en un solo registro en la estructura nueva, si tienes definido eso lo demas es sencillo.
Debes que generar un cursor, recorrer tu tabla y acumularla en una variable para luego insertarla en la nueva tabla creada.
Pero claro, el primer punto es que tengas definido tu secuencia como te puse en primera instancia.
Cualquier duda o consulta adicional me la haces saber, espero te sirva.
Saludos.
Brownsea
04/11/2009
abnuevo, usuario preguntando en SQL Server
Usuario
Hola
El patron seria cuando cambie el idVeh, pero no hay una cantidad de filas determinadas.
Es decir un vehiculo puede tener 3 filas, otro 10, otro 1, etc..
¿podrias indicarme aproximadamente como serian las sentencias del cursor?
Gracias por el interes tomado
Saludos
 
04/11/2009
abnuevo, experto respondiendo en SQL Server
Experto
Hola,
Bueno, si no sabes cual es el patron, o si es variable igual debes identificarlo, ya sea de tu tabla origen con un campo, como un id de agrupacion, de ser posible eso avisame para pasarte el codigo q podrias utilizar para hacer el cursor.
Saludos.
Brownsea
05/11/2009
abnuevo, usuario preguntando en SQL Server
Usuario
Gracias por el interes tomado
Efectivamente en la tabla hay un id de agrupacion, que seria el idVeh.
Saludos
05/11/2009
abnuevo, experto respondiendo en SQL Server
Experto
Ok,
Con eso ya podriamos trabajar, la estructura que te presentare es manejando quiebres, bansandonos en el id de agrupacion
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
     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 solucion, disculpa si hay algun tipo de error pero desde donde contesto no tengo un sql server para hacer las pruebas, pero creo q esta ok, cualquier cosa me avisas.
Saludos.
Brownsea
05/11/2009
abnuevo, usuario preguntando en SQL Server
Usuario
Una solucion EXCELENTE, es justo lo que necesitaba.
Por favor si tines un rato, podrias explicarme un poco las sentencias y extructura del cursor.
comprender la solucion te lleva a preguntar menos.
Enlaces patrocinados