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

Concatenar registros de un mismo campo

Estas en el tema de Concatenar registros de un mismo campo en el foro de SQL Server en Foros del Web. Hola a todos. La consulta que quiero hacer y no me sale es la siguiente: Tengo una tabla de Incidencias, y otra tabla donde estan ...
  #1 (permalink)  
Antiguo 16/07/2006, 23:32
 
Fecha de Ingreso: julio-2006
Mensajes: 5
Antigüedad: 17 años, 9 meses
Puntos: 0
Concatenar registros de un mismo campo

Hola a todos. La consulta que quiero hacer y no me sale es la siguiente:

Tengo una tabla de Incidencias, y otra tabla donde estan las descripciones de las incidencias, pero con mas de 1 registro por incidencia. Mas o menos lo q habia quiero es algo asi:

select i.codigo, (select concat(descripcion) from desc d where i.codigo = d.codigoInci) as descripcion
from incidencia

Es decir, lo que quiero es hacer que un select me devuelva la concatenacion de varios registros del mismo campo, y en el SQL Server me sale que la funcion concat no es reconocida. A ver si me dan una mano con esta consulta. Gracias,


p.d. ejemplo de las tablas
INCIDENCIA
Codigo
--------
1002
1003
1004


DESC
Codigo Descripcion
--------------------------------
1002 Hola a tod
1002 os, espero
1002 que me ay
1002 uden
1003 ..........
  #2 (permalink)  
Antiguo 17/07/2006, 07:39
 
Fecha de Ingreso: julio-2006
Ubicación: En algún lugar de un grán pais
Mensajes: 112
Antigüedad: 17 años, 9 meses
Puntos: 2
mmm, lo que yo haría sería un cursor, que recorra desc donde codigo sea igual y lo guardaría en una tabla temporal de la siguiente manera:
DECLARE
@CODIGO INT,
@DESCRIPCION VARCHAR(255)
@TEXTOFINAL VARCHAR(3000)


IF EXISTS (SELECT * FROM tempdb.dbo.sysobjects where id= object_id('tempdb.guest.##tmpTabla'))
begin
exec ('drop table ##tmpTabla')
end

create table ##tmpTabla(
Texto nvarchar(3000)
)

DECLARE curLee CURSOR FORWARD_ONLY FOR
SELECT DISTINCT iNCIDENCIA.CODIGO
FROM INCIDENCIA INNER JOIN DESC ON INCIDENCIA.CODIGO= DESC.CODIGO ORDER BY CODIGO
OPEN curLee
FETCH NEXT FROM curLee INTO @CODIGO
WHILE @@FETCH_STATUS = 0
BEGIN
--SE DECLARA UN SEGUNDO CURSOR
DECLARE curLee2 CURSOR FORWARD_ONLY FOR
SELECT DESCRIPCION FROM DESC WHERE CODIGO = @CODIGO
OPEN curLee2
FETCH NEXT FROM curLee2 INTO @DESCRIPCION
WHILE @@FETCH_STATUS = 0
BEGIN
SET @TEXTOFINAL = @TEXTOFINAL + @DESCRIPCION
FETCH NEXT FROM curLee2 INTO @DESCRIPCION
END
CLOSE curLee2
DEALLOCATE curLee2
--FIN SEGUNDO CURSOR
INSERT INTO ##TMPtABLA VALUES (@TEXTOFINAL)

FETCH NEXT FROM curLee INTO @CODIGO
END
CLOSE curLee
DEALLOCATE curLee


SELECT * FROM ##TMPTABLA

ESPERO TE SIRVA
  #3 (permalink)  
Antiguo 17/07/2006, 23:11
 
Fecha de Ingreso: julio-2006
Mensajes: 5
Antigüedad: 17 años, 9 meses
Puntos: 0
Si me salió, muchas gracias Miguel. Si había pensado en los cursores, pero no sabia como hacer el select, pero con la tabla temporal sí sale,

SELECT * FROM ##TMPTABLA

Esta sentencia resolvió mis problemas


De verdad que muy buen consejo, gracias
  #4 (permalink)  
Antiguo 18/07/2006, 07:02
 
Fecha de Ingreso: julio-2006
Ubicación: En algún lugar de un grán pais
Mensajes: 112
Antigüedad: 17 años, 9 meses
Puntos: 2
De acuerdo

Saludos,
JE, que bueno que te sirvió (y eso que no lo corrí , solo lo escribí, je) ja no es cierto, nadmas faltaría ajustar algunso dtalles como el de hacer un drop a la tabla temporal cuando acabes de usarlo, que se supone qeue cuando se cierran las sesiones desaparecen esas tablas.
ahora bien también falta ajustar los tamaño s de los campos y las variables, yo le puse 3000 pero podría o ser mas grande o algo así porque no sabemos si puedas tener cadenas mucho mas grandes.
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 01:38.