Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Concatenar varias filas en una columna

Estas en el tema de Concatenar varias filas en una columna en el foro de SQL Server en Foros del Web. Alguien me puede ayudar para convertir la siguiente tabla: IdHistoria NUmFila Memo 1 0 es de color 1 1 rojo 2 0 no funciona 3 ...
  #1 (permalink)  
Antiguo 24/12/2007, 11:53
 
Fecha de Ingreso: diciembre-2007
Mensajes: 8
Antigüedad: 16 años, 4 meses
Puntos: 0
Concatenar varias filas en una columna

Alguien me puede ayudar para convertir la siguiente tabla:

IdHistoria NUmFila Memo
1 0 es de color
1 1 rojo
2 0 no funciona
3 0
3 1 para revisar

en esta tabla
IdHistoria Memo
1 es de color rojo
2 no funciona
3 para revisar

Gracias por la ayuda, estoy medio desesperado
Franck
  #2 (permalink)  
Antiguo 24/12/2007, 13:35
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Concatenar varias filas en una columna

Franck

No se comprende cual es el objetivo, me podrias dar mas datos.
  #3 (permalink)  
Antiguo 24/12/2007, 13:51
 
Fecha de Ingreso: diciembre-2007
Mensajes: 8
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Concatenar varias filas en una columna

La tabla actual tiene tres columnas. la primera es el ID (IdHistoria), la segunda (NumFila) que corresponde al orden en que se debe concatenar y la tercera columna (Memo). Necesito reconstruir una tabla de solo dos columans, la primera con el "IdHistoria" y la segunda "Memo" con los datos concatenados. En resumen es Concatenar los datos de la columna Memo con el mismo IdHistoria en el orden de la columna NumFila en una nueva tabla
  #4 (permalink)  
Antiguo 24/12/2007, 15:19
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Concatenar varias filas en una columna

Si solamente son 2 filas (registros), estamos del otro lado, pero si no, esto no funcionara

SELECT t1.memo+t2.memo
FROM tutabla t1 join tutabla2
ON t1.IdHistoria = t2.NUmFila
WHERE t1.NUmFila < t2.NUmFila

Espero que funcione
  #5 (permalink)  
Antiguo 26/12/2007, 11:58
 
Fecha de Ingreso: diciembre-2007
Mensajes: 8
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Concatenar varias filas en una columna

Gracias por la ayuda pero no me funciona.
Tengo solo una tabla que tiene tres columna y un gran numero de fila (va creciendo).
Tomando los datos de esta tabla debo crear una nueva tabla concatenando los datos de varias filas de la tercera columna (llamada Memo) en una sola fila toda vez que tengan el mismo ID (primera columna IdHistoria)
Ejemplo
ID Memo
1 a
2 b
2 c
3 d
4 e
5 f
5 g
5 h

Resultado de la nueva tabla que se crea a partir de lo anterior
ID Memo
1 a
2 bc
3 d
4 e
5 fgh
  #6 (permalink)  
Antiguo 26/12/2007, 13:39
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Concatenar varias filas en una columna

create table prueba (ID INT, MEMO VARCHAR(50))

INSERT INTO prueba VALUES(1, 'a')
INSERT INTO prueba VALUES(2, 'b')
INSERT INTO prueba VALUES(2, 'c')
INSERT INTO prueba VALUES(3, 'd')
INSERT INTO prueba VALUES(4, 'e')
INSERT INTO prueba VALUES(5, 'f')
INSERT INTO prueba VALUES(5, 'g')
INSERT INTO prueba VALUES(5, 'h')

alter function dbo.fn_ConcatenaMemo (@id int)
returns varchar(50)
as
begin
declare @memo varchar(50)
set @memo = ''
select @memo = @memo + memo from prueba where id = @id
return (@memo)
end

SELECT distinct ID, dbo.fn_ConcatenaMemo(id) as memo
from prueba


drop table prueba
  #7 (permalink)  
Antiguo 26/12/2007, 15:26
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Re: Concatenar varias filas en una columna

En caso de que uses SQL Server 2000 la solución propuesta por iislas es una de las más fáciles. En caso de que uses SQL Server 2005, puedes intentar usando XML con CROSS APPLY:
Código:
SELECT  a.ID, node.text
FROM    (
          SELECT  DISTINCT id
          FROM    Memos
        ) AS a
CROSS APPLY(
          SELECT  Memo AS '*'
          FROM    Memos
          WHERE   id = a.id
          FOR XML PATH('')
        ) AS node(text) 

Última edición por Beakdan; 26/12/2007 a las 17:52
  #8 (permalink)  
Antiguo 28/12/2007, 11:22
 
Fecha de Ingreso: diciembre-2007
Mensajes: 8
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Concatenar varias filas en una columna

MUCHAS GRACIAS A TODOS ME FUNCIONO.
Son Geniales
  #9 (permalink)  
Antiguo 05/11/2010, 17:45
 
Fecha de Ingreso: noviembre-2010
Ubicación: Aqui y tu?
Mensajes: 5
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Concatenar varias filas en una columna

yo use esta solucion que encontré en http://es.w3support.net/index.php?db=so&id=111341

declare @t table(id int, name varchar(20),somecolumn varchar(10))
insert into @t
select 1,'ABC','X' union all
select 1 ,'ABC','Y' union all
select 1,'ABC','Z' union all
select 2 ,'MNO','R' union all
select 2 ,'MNO','S'

Consulta:

select ID,Name,
stuff((select ',' + CAST(t2.SomeColumn as varchar(10))
from @t t2 where t1.id = t2.id and t1.name = t2.name
for xml path('')),1,1,'') SomeColumn
from @t t1
group by id,Name

Salida:

ID NameSomeColumn
1 ABCX,Y,Z
2 MNOR,S
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:55.