Convertir columnas a filas

18/01/2006 - 15:55 por Fabián | Informe spam
Hola compañeros,
La pregunta es como se puede convertir de filas a columnas.
Esta cadena de texto la tengo que insertar en una tabla a la cual tengo que
crear.
IPMT00000052|MT000052|3315|25054|23087|23526
El resultado deseado es el siguiente
IPMT00000052|MT000052|3315
IPMT00000052|MT000052|25054
IPMT00000052|MT000052|23087
IPMT00000052|MT000052|23526
Es factible ?
Desde ya muchas gracias
Fabián

Preguntas similare

Leer las respuestas

#1 Victor Koch
18/01/2006 - 17:32 | Informe spam
Hola Fabian,

Porque no te creas una tabla con 6 campos, según tu ejemplo, importas el
archivo a esa tabla, luego te creas otra tabla con los 3 campos y haces 4
insert into a esa nueva tabla, el primer insert into toma los campos 1,2 y
3, el segundo el 1,2 y 4, el tercero 1,2 y 5 y así sucesivamente.


Un saludo, Víctor Koch.


"Fabián" escribió en el mensaje
news:
Hola compañeros,
La pregunta es como se puede convertir de filas a columnas.
Esta cadena de texto la tengo que insertar en una tabla a la cual tengo


que
crear.
IPMT00000052|MT000052|3315|25054|23087|23526
El resultado deseado es el siguiente
IPMT00000052|MT000052|3315
IPMT00000052|MT000052|25054
IPMT00000052|MT000052|23087
IPMT00000052|MT000052|23526
Es factible ?
Desde ya muchas gracias
Fabián

Respuesta Responder a este mensaje
#2 Alejandro Mesa
18/01/2006 - 17:34 | Informe spam
Fabián,

1 -

select c1, c2, c3 as new_c3
from t1
union all
select c1, c2, c4
from t1
union all
select c1, c2, c5
from t1
union all
select c1, c2, c6
from t1
go

2 -

select
t1.c1,
t1.c2,
case
when t2.c1 = 1 then t1.c3
when t2.c1 = 2 then t1.c4
when t2.c1 = 3 then t1.c5
when t2.c1 = 4 then t1.c6
end as new_c3
from
t1
cross join
(select 1 as c1 union all select 2 union all select 3 union all select 4)
as t2
go


AMB

"Fabián" wrote:

Hola compañeros,
La pregunta es como se puede convertir de filas a columnas.
Esta cadena de texto la tengo que insertar en una tabla a la cual tengo que
crear.
IPMT00000052|MT000052|3315|25054|23087|23526
El resultado deseado es el siguiente
IPMT00000052|MT000052|3315
IPMT00000052|MT000052|25054
IPMT00000052|MT000052|23087
IPMT00000052|MT000052|23526
Es factible ?
Desde ya muchas gracias
Fabián

Respuesta Responder a este mensaje
#3 Fabián
18/01/2006 - 17:59 | Informe spam
Alejandro y Victor
Muchas gracias por sus consejos.
Voy a ver como se puede hacer.
El txt tiene 1955 lineas y cuando lo importe mediante un dts. Creo la misma
con 48 campos.
Esto es una parte del archivo
IPMT00000028|MT000028|12597
IPMT00000029|MT000029|15300|17298|26786|24810|14817|7395|2407|20598|25653|5000| 20598
IPMT00000030|MT000030|5705
IPMT00000031|MT000031|
IPMT00000036|MT000036|11649
IPMT00000037|MT000037|
IPMT00000043|MT000043|
IPMT00000044|MT000044|
IPMT00000045|MT000045|
IPMT00000046|MT000046|
IPMT00000052|MT000052|3315|25054|23087|23526|22055|1766|17113|24444|4530|6558|21519|4617|14199|
Lo que tienen en comúm es el separador |
Gracias
Fabián

"Victor Koch" escribió:

Hola Fabian,

Porque no te creas una tabla con 6 campos, según tu ejemplo, importas el
archivo a esa tabla, luego te creas otra tabla con los 3 campos y haces 4
insert into a esa nueva tabla, el primer insert into toma los campos 1,2 y
3, el segundo el 1,2 y 4, el tercero 1,2 y 5 y así sucesivamente.


Un saludo, Víctor Koch.


"Fabián" escribió en el mensaje
news:
> Hola compañeros,
> La pregunta es como se puede convertir de filas a columnas.
> Esta cadena de texto la tengo que insertar en una tabla a la cual tengo
que
> crear.
> IPMT00000052|MT000052|3315|25054|23087|23526
> El resultado deseado es el siguiente
> IPMT00000052|MT000052|3315
> IPMT00000052|MT000052|25054
> IPMT00000052|MT000052|23087
> IPMT00000052|MT000052|23526
> Es factible ?
> Desde ya muchas gracias
> Fabián
>



Respuesta Responder a este mensaje
#4 Alejandro Mesa
18/01/2006 - 18:10 | Informe spam
Fabián,

Entonces usa la segunda opcion que te di y genera la tabla derivada con 48
filas. Filtra el resultado para que no tome las columnas con valor NULL.

select *
from
(
select
t1.c1,
t1.c2,
case
when t2.c1 = 1 then t1.c3
when t2.c1 = 2 then t1.c4
when t2.c1 = 3 then t1.c5
when t2.c1 = 4 then t1.c6
...
when t2.c1 = 48 then t1.c48
end as new_c3
from
t1
cross join
(
select 1 as c1
union all
select 2
union all
select 3
union all
select 4
...
select 48
)
as t2
) as t
where new_c3 is not null
go


AMB


"Fabián" wrote:

Alejandro y Victor
Muchas gracias por sus consejos.
Voy a ver como se puede hacer.
El txt tiene 1955 lineas y cuando lo importe mediante un dts. Creo la misma
con 48 campos.
Esto es una parte del archivo
IPMT00000028|MT000028|12597
IPMT00000029|MT000029|15300|17298|26786|24810|14817|7395|2407|20598|25653|5000| 20598
IPMT00000030|MT000030|5705
IPMT00000031|MT000031|
IPMT00000036|MT000036|11649
IPMT00000037|MT000037|
IPMT00000043|MT000043|
IPMT00000044|MT000044|
IPMT00000045|MT000045|
IPMT00000046|MT000046|
IPMT00000052|MT000052|3315|25054|23087|23526|22055|1766|17113|24444|4530|6558|21519|4617|14199|
Lo que tienen en comúm es el separador |
Gracias
Fabián

"Victor Koch" escribió:

> Hola Fabian,
>
> Porque no te creas una tabla con 6 campos, según tu ejemplo, importas el
> archivo a esa tabla, luego te creas otra tabla con los 3 campos y haces 4
> insert into a esa nueva tabla, el primer insert into toma los campos 1,2 y
> 3, el segundo el 1,2 y 4, el tercero 1,2 y 5 y así sucesivamente.
>
>
> Un saludo, Víctor Koch.
>
>
> "Fabián" escribió en el mensaje
> news:
> > Hola compañeros,
> > La pregunta es como se puede convertir de filas a columnas.
> > Esta cadena de texto la tengo que insertar en una tabla a la cual tengo
> que
> > crear.
> > IPMT00000052|MT000052|3315|25054|23087|23526
> > El resultado deseado es el siguiente
> > IPMT00000052|MT000052|3315
> > IPMT00000052|MT000052|25054
> > IPMT00000052|MT000052|23087
> > IPMT00000052|MT000052|23526
> > Es factible ?
> > Desde ya muchas gracias
> > Fabián
> >
>
>
>
Respuesta Responder a este mensaje
#5 Fabián
18/01/2006 - 18:20 | Informe spam
Alejandro,
Efectivamente eso es lo que estoy haciendo en estos momentos.
Como siempre muchas gracias por la colaboración que me has prestado.
Si estas cerca de Córdoba, Argentina.
Avisame así te invito por lo menos una cerveza.
Saludos

"Alejandro Mesa" escribió:

Fabián,

Entonces usa la segunda opcion que te di y genera la tabla derivada con 48
filas. Filtra el resultado para que no tome las columnas con valor NULL.

select *
from
(
select
t1.c1,
t1.c2,
case
when t2.c1 = 1 then t1.c3
when t2.c1 = 2 then t1.c4
when t2.c1 = 3 then t1.c5
when t2.c1 = 4 then t1.c6
...
when t2.c1 = 48 then t1.c48
end as new_c3
from
t1
cross join
(
select 1 as c1
union all
select 2
union all
select 3
union all
select 4
...
select 48
)
as t2
) as t
where new_c3 is not null
go


AMB


"Fabián" wrote:

> Alejandro y Victor
> Muchas gracias por sus consejos.
> Voy a ver como se puede hacer.
> El txt tiene 1955 lineas y cuando lo importe mediante un dts. Creo la misma
> con 48 campos.
> Esto es una parte del archivo
> IPMT00000028|MT000028|12597
> IPMT00000029|MT000029|15300|17298|26786|24810|14817|7395|2407|20598|25653|5000| 20598
> IPMT00000030|MT000030|5705
> IPMT00000031|MT000031|
> IPMT00000036|MT000036|11649
> IPMT00000037|MT000037|
> IPMT00000043|MT000043|
> IPMT00000044|MT000044|
> IPMT00000045|MT000045|
> IPMT00000046|MT000046|
> IPMT00000052|MT000052|3315|25054|23087|23526|22055|1766|17113|24444|4530|6558|21519|4617|14199|
> Lo que tienen en comúm es el separador |
> Gracias
> Fabián
>
> "Victor Koch" escribió:
>
> > Hola Fabian,
> >
> > Porque no te creas una tabla con 6 campos, según tu ejemplo, importas el
> > archivo a esa tabla, luego te creas otra tabla con los 3 campos y haces 4
> > insert into a esa nueva tabla, el primer insert into toma los campos 1,2 y
> > 3, el segundo el 1,2 y 4, el tercero 1,2 y 5 y así sucesivamente.
> >
> >
> > Un saludo, Víctor Koch.
> >
> >
> > "Fabián" escribió en el mensaje
> > news:
> > > Hola compañeros,
> > > La pregunta es como se puede convertir de filas a columnas.
> > > Esta cadena de texto la tengo que insertar en una tabla a la cual tengo
> > que
> > > crear.
> > > IPMT00000052|MT000052|3315|25054|23087|23526
> > > El resultado deseado es el siguiente
> > > IPMT00000052|MT000052|3315
> > > IPMT00000052|MT000052|25054
> > > IPMT00000052|MT000052|23087
> > > IPMT00000052|MT000052|23526
> > > Es factible ?
> > > Desde ya muchas gracias
> > > Fabián
> > >
> >
> >
> >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida