Unir dos filas en una sola.

12/01/2005 - 18:31 por Salvador Ramos | Informe spam
Hola:

Estoy haciendo un proceso de importación a SQL Server un poco peculiar.
Tengo un fichero .txt que contiene un listado, éste lleva encabezados,
números de página, etc... y además en el detalle cada fila está impresa con
datos en dos líneas.

He conseguido eliminar toda la información que no me vale para guardarla en
una tabla. Ahora me queda unir cada dos líneas en una sola, y esa es mi
duda, como podría hacerlo de forma que realmente se uniese una línea y la
siguiente en una sola ? Os paso un ejemplo de lo que tengo (además indicaros
que la tabla sólo tiene un campo VarChar(300) llamado Texto):
0001 Pepe Lopez
12345
0002 Juan Garcia
11112
...

Y lo que necesito es:
0001 Pepe Lopez 12345
0002 Juan Garcia 11112

No habría ningún problema en añadir algún campo a dicha tabla, ya que es una
tabla temporal mía que puedo poner el diseño que necesite. Por ahora tiene
un sólo campo, porque estoy importando como un sólo campo de texto cada
línea del listado, para posteriormente con SUBSTRING ir extrayendo las
partes que necesito y guardandolas en otra tabla ya definitiva con los
campos que necesito.

Muchas gracias

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

Preguntas similare

Leer las respuestas

#6 Salvador Ramos
12/01/2005 - 19:32 | Informe spam
No te preocupes por la performance, es un proceso mensual, y con unas 2000
filas :-)

Voy a probar mañana a primera hora, y ya os cuento como me ha ido.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"Liliana Sorrentino" escribió en el mensaje
news:eSPEkNN%
No sé el volumen de tu información así que no me juego por la performance,
pero tal vez esto te sirva:

create table #tabla
(Texto VarChar(300))
insert #tabla select '0001 Pepe Lopez'
insert #tabla select '12345'
insert #tabla select '0002 Juan Garcia'
insert #tabla select '11112'

select identity (smallint, 1, 1) as orden, texto
into #tablaOrden
from #tabla

select t1.texto + ' ' + t2.texto
from #tablaOrden t1
inner join #tablaOrden t2 on t2.orden = t1.orden + 1
where t1.orden % 2 <> 0

Cariños, Liliana.

"Salvador Ramos" escribió en el
mensaje news:#RrUxGN#
Si :-)


Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"Liliana Sorrentino" escribió en el


mensaje
news:%23Q%23szEN%
> Hola Salvador,
> El archivo tiene siempre el mismo formato? ¿La primera línea de las dos


a
> unir tiene cuatro dígitos + espacio + cualquierotracosa?
>
> "Salvador Ramos" escribió en el
> mensaje news:OWcKRyM#
>> Hola:
>>
>> Estoy haciendo un proceso de importación a SQL Server un poco
>> peculiar.
>> Tengo un fichero .txt que contiene un listado, éste lleva encabezados,
>> números de página, etc... y además en el detalle cada fila está
>> impresa
> con
>> datos en dos líneas.
>>
>> He conseguido eliminar toda la información que no me vale para


guardarla
> en
>> una tabla. Ahora me queda unir cada dos líneas en una sola, y esa es
>> mi
>> duda, como podría hacerlo de forma que realmente se uniese una línea y


la
>> siguiente en una sola ? Os paso un ejemplo de lo que tengo (además
> indicaros
>> que la tabla sólo tiene un campo VarChar(300) llamado Texto):
>> 0001 Pepe Lopez
>> 12345
>> 0002 Juan Garcia
>> 11112
>> ...
>>
>> Y lo que necesito es:
>> 0001 Pepe Lopez 12345
>> 0002 Juan Garcia 11112
>>
>> No habría ningún problema en añadir algún campo a dicha tabla, ya que


es
> una
>> tabla temporal mía que puedo poner el diseño que necesite. Por ahora
>> tiene
>> un sólo campo, porque estoy importando como un sólo campo de texto
>> cada
>> línea del listado, para posteriormente con SUBSTRING ir extrayendo las
>> partes que necesito y guardandolas en otra tabla ya definitiva con los
>> campos que necesito.
>>
>> Muchas gracias
>>
>> Un saludo
>> Salvador Ramos
>> Murcia - España
>> [Microsoft MVP SQL Server]
>> www.helpdna.net (información sobre SQL server, Windows DNA y .NET)
>>
>>
>
>






Respuesta Responder a este mensaje
#7 ulises
12/01/2005 - 20:01 | Informe spam
Si tienes tus datos delimitados por algun caracter, algo como :

0001;Pepe Lopez;
12345;
0002;Juan Garcia;
11112;

y tienes forma de identificar cuando se trata de la primera
fila del registro, podrías ingresarlo directamente en un
DTS haciendo lo siguiente en un script ActiveX :

Dim codigo
Dim nombre

Function Main()

If codicionparalaprimerafila Then
codigo = DTSSource("Col001")
nombre = DTSSource("Col002")
Main = DTSTransformStat_SkipRow
else
DTSDestination("codigo") = codigo
DTSDestination("nombre") = nombre
DTSDestination("valor") = DTSSource("Col001")
Main = DTSTransformStat_OK
End If

End Function

Saludos,
Ulises

Hola:

Estoy haciendo un proceso de importación a SQL Server un


poco peculiar.
Tengo un fichero .txt que contiene un listado, éste lleva


encabezados,
números de página, etc... y además en el detalle cada fila


está impresa con
datos en dos líneas.

He conseguido eliminar toda la información que no me vale


para guardarla en
una tabla. Ahora me queda unir cada dos líneas en una


sola, y esa es mi
duda, como podría hacerlo de forma que realmente se uniese


una línea y la
siguiente en una sola ? Os paso un ejemplo de lo que tengo


(además indicaros
que la tabla sólo tiene un campo VarChar(300) llamado Texto):
0001 Pepe Lopez
12345
0002 Juan Garcia
11112


Y lo que necesito es:
0001 Pepe Lopez 12345
0002 Juan Garcia 11112

No habría ningún problema en añadir algún campo a dicha


tabla, ya que es una
tabla temporal mía que puedo poner el diseño que necesite.


Por ahora tiene
un sólo campo, porque estoy importando como un sólo campo


de texto cada
línea del listado, para posteriormente con SUBSTRING ir


extrayendo las
partes que necesito y guardandolas en otra tabla ya


definitiva con los
campos que necesito.

Muchas gracias

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA


y .NET)


.

Respuesta Responder a este mensaje
#8 Gustavo Larriera [MVP]
12/01/2005 - 20:35 | Informe spam
Tal vez esto te sirva. Asumo que la tabla de lineas tiene una columna
numerada secuencialmente:

USE tempdb
GO

CREATE TABLE linea (numero int, texto VARCHAR(300))
GO

INSERT linea VALUES (1, 'primera linea')
INSERT linea VALUES (2, 'segunda linea')
INSERT linea VALUES (3, 'tercera linea')
INSERT linea VALUES (4, 'cuarta linea')
INSERT linea VALUES (5, 'quinta linea')
GO

CREATE TABLE resultado (numero int, texto VARCHAR(300))
GO

INSERT resultado
SELECT numero, texto
FROM linea
WHERE numero % 2 <> 0
ORDER BY numero ASC

UPDATE resultado
SET texto = texto + ISNULL((SELECT TOP 1 texto FROM linea WHERE
numero > resultado.numero AND numero % 2 = 0 ORDER BY numero ASC), '')

SELECT * FROM resultado

DROP TABLE linea
DROP TABLE resultado


"Salvador Ramos" wrote in message
news::
Hola:

Estoy haciendo un proceso de importación a SQL Server un poco peculiar.
Tengo un fichero .txt que contiene un listado, éste lleva encabezados,
números de página, etc... y además en el detalle cada fila está impresa
con
datos en dos líneas.

He conseguido eliminar toda la información que no me vale para guardarla
en
una tabla. Ahora me queda unir cada dos líneas en una sola, y esa es mi
duda, como podría hacerlo de forma que realmente se uniese una línea y la

siguiente en una sola ? Os paso un ejemplo de lo que tengo (además
indicaros
que la tabla sólo tiene un campo VarChar(300) llamado Texto):
0001 Pepe Lopez
12345
0002 Juan Garcia
11112
...

Y lo que necesito es:
0001 Pepe Lopez 12345
0002 Juan Garcia 11112

No habría ningún problema en añadir algún campo a dicha tabla, ya que es
una
tabla temporal mía que puedo poner el diseño que necesite. Por ahora tiene

un sólo campo, porque estoy importando como un sólo campo de texto cada
línea del listado, para posteriormente con SUBSTRING ir extrayendo las
partes que necesito y guardandolas en otra tabla ya definitiva con los
campos que necesito.

Muchas gracias

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)




Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and
confers no rights.
Respuesta Responder a este mensaje
#9 Ramiro Hernandez R.
13/01/2005 - 00:31 | Informe spam
Por que no creas otra tabla de paso con un campo como identity llamemosle
"campo1" y que comienze en 1
y el campo donde dejas los datos llamemosle "texto"
y la tabla temporal "tablatemporal"
y otra tabla identica que va a ser la "tablafinal"

luego corres las siguiente instruciones
Insert InTo tablafinal (texto)
Select a.texto + ' ' + b.texto
From tablatemporal As a
Inner Join tablatemporal As b
On b.Campo1 = a.Campo1 + 1
And a.Campo1 % 2 = 0
Where a.Campo1 % 2 = 1


"Salvador Ramos" escribió en el
mensaje news:%23wXrmGN%
Lo estoy haciendo todo desde SQL Server, en un paquete DTS

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"Manuel Vera" escribió en el mensaje
news:OrfRa7M%
> El archivo de texto lo lees desde VB o desde SQLServer?
>
> MV
>
> "Salvador Ramos" wrote in message
> news:OWcKRyM%
>> Hola:
>>
>> Estoy haciendo un proceso de importación a SQL Server un poco peculiar.
>> Tengo un fichero .txt que contiene un listado, éste lleva encabezados,
>> números de página, etc... y además en el detalle cada fila está impresa
> con
>> datos en dos líneas.
>>
>> He conseguido eliminar toda la información que no me vale para


guardarla
> en
>> una tabla. Ahora me queda unir cada dos líneas en una sola, y esa es mi
>> duda, como podría hacerlo de forma que realmente se uniese una línea y


la
>> siguiente en una sola ? Os paso un ejemplo de lo que tengo (además
> indicaros
>> que la tabla sólo tiene un campo VarChar(300) llamado Texto):
>> 0001 Pepe Lopez
>> 12345
>> 0002 Juan Garcia
>> 11112
>> ...
>>
>> Y lo que necesito es:
>> 0001 Pepe Lopez 12345
>> 0002 Juan Garcia 11112
>>
>> No habría ningún problema en añadir algún campo a dicha tabla, ya que


es
> una
>> tabla temporal mía que puedo poner el diseño que necesite. Por ahora
>> tiene
>> un sólo campo, porque estoy importando como un sólo campo de texto cada
>> línea del listado, para posteriormente con SUBSTRING ir extrayendo las
>> partes que necesito y guardandolas en otra tabla ya definitiva con los
>> campos que necesito.
>>
>> Muchas gracias
>>
>> Un saludo
>> Salvador Ramos
>> Murcia - España
>> [Microsoft MVP SQL Server]
>> www.helpdna.net (información sobre SQL server, Windows DNA y .NET)
>>
>>
>
>


Respuesta Responder a este mensaje
#10 Salvador Ramos
13/01/2005 - 09:23 | Informe spam
No están delimitados, sólo me queda la opción de insertarlos en un sólo
campo varchar.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"ulises" escribió en el mensaje
news:06a401c4f8d9$1dac4f80$
Si tienes tus datos delimitados por algun caracter, algo como :

0001;Pepe Lopez;
12345;
0002;Juan Garcia;
11112;

y tienes forma de identificar cuando se trata de la primera
fila del registro, podrías ingresarlo directamente en un
DTS haciendo lo siguiente en un script ActiveX :

Dim codigo
Dim nombre

Function Main()

If codicionparalaprimerafila Then
codigo = DTSSource("Col001")
nombre = DTSSource("Col002")
Main = DTSTransformStat_SkipRow
else
DTSDestination("codigo") = codigo
DTSDestination("nombre") = nombre
DTSDestination("valor") = DTSSource("Col001")
Main = DTSTransformStat_OK
End If

End Function

Saludos,
Ulises

Hola:

Estoy haciendo un proceso de importación a SQL Server un


poco peculiar.
Tengo un fichero .txt que contiene un listado, éste lleva


encabezados,
números de página, etc... y además en el detalle cada fila


está impresa con
datos en dos líneas.

He conseguido eliminar toda la información que no me vale


para guardarla en
una tabla. Ahora me queda unir cada dos líneas en una


sola, y esa es mi
duda, como podría hacerlo de forma que realmente se uniese


una línea y la
siguiente en una sola ? Os paso un ejemplo de lo que tengo


(además indicaros
que la tabla sólo tiene un campo VarChar(300) llamado Texto):
0001 Pepe Lopez
12345
0002 Juan Garcia
11112


Y lo que necesito es:
0001 Pepe Lopez 12345
0002 Juan Garcia 11112

No habría ningún problema en añadir algún campo a dicha


tabla, ya que es una
tabla temporal mía que puedo poner el diseño que necesite.


Por ahora tiene
un sólo campo, porque estoy importando como un sólo campo


de texto cada
línea del listado, para posteriormente con SUBSTRING ir


extrayendo las
partes que necesito y guardandolas en otra tabla ya


definitiva con los
campos que necesito.

Muchas gracias

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA


y .NET)


.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida