separar campos de la tabla

17/06/2004 - 14:02 por Jomaweb | Informe spam
Hola

tengo la siguiente tabla:

CLIENTE PEDIDO1 FACTURA1 PEDIDO2 FACTURA2 PEDIDO3
FACTURA3

y quiero pasar sus datos a esta otra:

CLIENTE PEDIDO FACTURA NUMERO

El campo NUMERO es el que me permitirá determinar si es la factura 1 , la 2
o la 3. En principio iba así porque no era posible que un cliente tuviera
más de tres facturas a la misma vez. Pueden existir clientes con solo un
pedido, con dos o con tres. Mínimo siempre uno.

Lo intento con un procedimiento almacenado (que adjunto al final del texto)
pero solamente me pasa el primer cliente.
Me han dicho que visualmente es más facil hacerlo con las herramientas del
administrador corporativo como por ejemplo el asistente de paquetes de
transformación de datos o que si no tengo que hacer un lio con cursores
FETCH.
¿Sigo con el Procedimiento almacenado (que os ruego reviséis), me meto con
FETCH, o es más facil con los asistentes?

Gracias
____________________________________________________________________________
________________

CREATE PROCEDURE [pa_clientes_nuevaTabla] AS
DECLARE @cliente integer,@pedido1 integer, @factura1 integer, @pedido2
integer, @factura2 integer, @pedido3 integer, @factura3 integer

select @cliente=cliente,@pedido1=pedido1,
@factura1=factura1,@pedido2=pedido2, @factura2=factura2,@pedido3=pedido3,
@factura3=factura3 from TABLACLIENTES

IF (@factura1<>0) insert into NUEVATABLA
(cliente,pedido,factura,numero) values(@cliente,@pedido,@factura,'1')
IF (@factura2<>0) insert into NUEVATABLA
(cliente,pedido,factura,numero) values(@cliente,@pedido,@factura,'2')
IF (@factura3<>0) insert into NUEVATABLA (cliente,pedido,factura,numero)
values(@cliente,@pedido,@factura,'3')


GO

Preguntas similare

Leer las respuestas

#1 Maxi
17/06/2004 - 16:54 | Informe spam
Hola, y porque no usar Insert into?

o sea:

Insert into tabladestino (campos)
Select campos from tablaorigen

Asi deberias hacerlo


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Jomaweb" escribió en el mensaje
news:uop$
Hola

tengo la siguiente tabla:

CLIENTE PEDIDO1 FACTURA1 PEDIDO2 FACTURA2 PEDIDO3
FACTURA3

y quiero pasar sus datos a esta otra:

CLIENTE PEDIDO FACTURA NUMERO

El campo NUMERO es el que me permitirá determinar si es la factura 1 , la


2
o la 3. En principio iba así porque no era posible que un cliente tuviera
más de tres facturas a la misma vez. Pueden existir clientes con solo un
pedido, con dos o con tres. Mínimo siempre uno.

Lo intento con un procedimiento almacenado (que adjunto al final del


texto)
pero solamente me pasa el primer cliente.
Me han dicho que visualmente es más facil hacerlo con las herramientas del
administrador corporativo como por ejemplo el asistente de paquetes de
transformación de datos o que si no tengo que hacer un lio con cursores
FETCH.
¿Sigo con el Procedimiento almacenado (que os ruego reviséis), me meto con
FETCH, o es más facil con los asistentes?

Gracias



____________________________________________________________________________
________________

CREATE PROCEDURE [pa_clientes_nuevaTabla] AS
DECLARE @cliente integer,@pedido1 integer, @factura1 integer, @pedido2
integer, @factura2 integer, @pedido3 integer, @factura3 integer

select @cliente=cliente,@pedido1=pedido1,
@factura1=factura1,@pedido2=pedido2, @factura2=factura2,@pedido3=pedido3,
@factura3=factura3 from TABLACLIENTES

IF (@factura1<>0) insert into NUEVATABLA
(cliente,pedido,factura,numero) values(@cliente,@pedido,@factura,'1')
IF (@factura2<>0) insert into NUEVATABLA
(cliente,pedido,factura,numero) values(@cliente,@pedido,@factura,'2')
IF (@factura3<>0) insert into NUEVATABLA


(cliente,pedido,factura,numero)
values(@cliente,@pedido,@factura,'3')


GO







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.698 / Virus Database: 455 - Release Date: 02/06/2004
Respuesta Responder a este mensaje
#2 Guido
17/06/2004 - 18:12 | Informe spam
Algo asi:
INSERT INTO Nueva
SELECT CLIENTE, PEDIDO1, FACTURA1, 1 AS NUMERO
FROM VIEJA

despues cambias los unos por doses y treses y la ejecutas de nuevo.

Guido
Insetec
La Plata Argentina

"Maxi" escribió en el mensaje
news:%
Hola, y porque no usar Insert into?

o sea:

Insert into tabladestino (campos)
Select campos from tablaorigen

Asi deberias hacerlo


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Jomaweb" escribió en el mensaje
news:uop$
> Hola
>
> tengo la siguiente tabla:
>
> CLIENTE PEDIDO1 FACTURA1 PEDIDO2 FACTURA2 PEDIDO3
> FACTURA3
>
> y quiero pasar sus datos a esta otra:
>
> CLIENTE PEDIDO FACTURA NUMERO
>
> El campo NUMERO es el que me permitirá determinar si es la factura 1 ,


la
2
> o la 3. En principio iba así porque no era posible que un cliente


tuviera
> más de tres facturas a la misma vez. Pueden existir clientes con solo un
> pedido, con dos o con tres. Mínimo siempre uno.
>
> Lo intento con un procedimiento almacenado (que adjunto al final del
texto)
> pero solamente me pasa el primer cliente.
> Me han dicho que visualmente es más facil hacerlo con las herramientas


del
> administrador corporativo como por ejemplo el asistente de paquetes de
> transformación de datos o que si no tengo que hacer un lio con cursores
> FETCH.
> ¿Sigo con el Procedimiento almacenado (que os ruego reviséis), me meto


con
> FETCH, o es más facil con los asistentes?
>
> Gracias
>



____________________________________________________________________________
> ________________
>
> CREATE PROCEDURE [pa_clientes_nuevaTabla] AS
> DECLARE @cliente integer,@pedido1 integer, @factura1 integer, @pedido2
> integer, @factura2 integer, @pedido3 integer, @factura3 integer
>
> select @cliente=cliente,@pedido1=pedido1,
> @factura1=factura1,@pedido2=pedido2,


@factura2=factura2,@pedido3=pedido3,
> @factura3=factura3 from TABLACLIENTES
>
> IF (@factura1<>0) insert into NUEVATABLA
> (cliente,pedido,factura,numero) values(@cliente,@pedido,@factura,'1')
> IF (@factura2<>0) insert into NUEVATABLA
> (cliente,pedido,factura,numero) values(@cliente,@pedido,@factura,'2')
> IF (@factura3<>0) insert into NUEVATABLA
(cliente,pedido,factura,numero)
> values(@cliente,@pedido,@factura,'3')
>
>
> GO
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.698 / Virus Database: 455 - Release Date: 02/06/2004


Respuesta Responder a este mensaje
#3 joselitux
17/06/2004 - 19:07 | Informe spam
No puedo usar insert into porque el orden es importante.
Es decir, que debo insertar factura 1, dos y tres correlativamente para
que tengan in identity lo más próximo posible.

On Thu, 17 Jun 2004
13:12:31 -0300, Guido wrote:

Algo asi:
INSERT INTO Nueva
SELECT CLIENTE, PEDIDO1, FACTURA1, 1 AS NUMERO
FROM VIEJA

despues cambias los unos por doses y treses y la ejecutas de nuevo.

Guido
Insetec
La Plata Argentina

"Maxi" escribió en el mensaje
news:%
Hola, y porque no usar Insert into?

o sea:

Insert into tabladestino (campos)
Select campos from tablaorigen

Asi deberias hacerlo


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Jomaweb" escribió en el mensaje
news:uop$
> Hola
>
> tengo la siguiente tabla:
>
> CLIENTE PEDIDO1 FACTURA1 PEDIDO2 FACTURA2 PEDIDO3
> FACTURA3
>
> y quiero pasar sus datos a esta otra:
>
> CLIENTE PEDIDO FACTURA NUMERO
>
> El campo NUMERO es el que me permitirá determinar si es la factura 1 ,


la
2
> o la 3. En principio iba así porque no era posible que un cliente


tuviera
> más de tres facturas a la misma vez. Pueden existir clientes con solo un
> pedido, con dos o con tres. Mínimo siempre uno.
>
> Lo intento con un procedimiento almacenado (que adjunto al final del
texto)
> pero solamente me pasa el primer cliente.
> Me han dicho que visualmente es más facil hacerlo con las herramientas


del
> administrador corporativo como por ejemplo el asistente de paquetes de
> transformación de datos o que si no tengo que hacer un lio con cursores
> FETCH.
> ¿Sigo con el Procedimiento almacenado (que os ruego reviséis), me meto


con
> FETCH, o es más facil con los asistentes?
>
> Gracias
>



____________________________________________________________________________
> ________________
>
> CREATE PROCEDURE [pa_clientes_nuevaTabla] AS
> DECLARE @cliente integer,@pedido1 integer, @factura1 integer, @pedido2
> integer, @factura2 integer, @pedido3 integer, @factura3 integer
>
> select @cliente=cliente,@pedido1=pedido1,
> @factura1=factura1,@pedido2=pedido2,


@factura2=factura2,@pedido3=pedido3,
> @factura3=factura3 from TABLACLIENTES
>
> IF (@factura1<>0) insert into NUEVATABLA
> (cliente,pedido,factura,numero) values(@cliente,@pedido,@factura,'1')
> IF (@factura2<>0) insert into NUEVATABLA
> (cliente,pedido,factura,numero) values(@cliente,@pedido,@factura,'2')
> IF (@factura3<>0) insert into NUEVATABLA
(cliente,pedido,factura,numero)
> values(@cliente,@pedido,@factura,'3')
>
>
> GO
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.698 / Virus Database: 455 - Release Date: 02/06/2004


Respuesta Responder a este mensaje
#4 Liliana Sorrentino
17/06/2004 - 19:51 | Informe spam
Hola,
Para hacer el INSERT de la manera que estás pidiendo no encuentro otra forma
que no sea con cursor o similar, y mi religión no me lo permite.
Si las facturas tienen numeración correlativa (al menos en mi país lo es) no
veo la necesidad de un número de orden por cliente.
No sé qué utilidad pensás darle al identity, si leés algunos de los post de
este grupo que hacen referencia al tema, no tengo nada para agregar. ¿No
sería suficiente un índice por cliente + pedido/factura o cliente + numero?
Pero si persistieras en la necesidad de tenerlo, te sugeriría la propuesta
de Guido en una tabla temporal y después un :

CREATE TABLE TablaNueva
(cliente..., pedido..., factura, numero, orden int identity)

INSERT TablaNueva
SELECT cliente, pedido, factura, numero FROM #Temporal ORDER BY cliente,
numero

Saludos... Liliana.

"joselitux" escribió en el mensaje
news:
No puedo usar insert into porque el orden es importante.
Es decir, que debo insertar factura 1, dos y tres correlativamente para
que tengan in identity lo más próximo posible.

On Thu, 17 Jun 2004
13:12:31 -0300, Guido wrote:

> Algo asi:
> INSERT INTO Nueva
> SELECT CLIENTE, PEDIDO1, FACTURA1, 1 AS NUMERO
> FROM VIEJA
>
> despues cambias los unos por doses y treses y la ejecutas de nuevo.
>
> Guido
> Insetec
> La Plata Argentina
>
> "Maxi" escribió en el mensaje
> news:%
>> Hola, y porque no usar Insert into?
>>
>> o sea:
>>
>> Insert into tabladestino (campos)
>> Select campos from tablaorigen
>>
>> Asi deberias hacerlo
>>
>>
>> Salu2
>> Maxi
>> Buenos Aires - Argentina
>> Desarrollador Microsoft 3 Estrellas .NET
>> Nunca consideres el estudio como una obligación sino como
>> una oportunidad para penetrar en el bello y maravillosos
>> mundo del saber.
>> - Albert Einstein
>>
>>
>>
>> "Jomaweb" escribió en el mensaje
>> news:uop$
>> > Hola
>> >
>> > tengo la siguiente tabla:
>> >
>> > CLIENTE PEDIDO1 FACTURA1 PEDIDO2 FACTURA2 PEDIDO3
>> > FACTURA3
>> >
>> > y quiero pasar sus datos a esta otra:
>> >
>> > CLIENTE PEDIDO FACTURA NUMERO
>> >
>> > El campo NUMERO es el que me permitirá determinar si es la factura 1


,
> la
>> 2
>> > o la 3. En principio iba así porque no era posible que un cliente
> tuviera
>> > más de tres facturas a la misma vez. Pueden existir clientes con solo


un
>> > pedido, con dos o con tres. Mínimo siempre uno.
>> >
>> > Lo intento con un procedimiento almacenado (que adjunto al final del
>> texto)
>> > pero solamente me pasa el primer cliente.
>> > Me han dicho que visualmente es más facil hacerlo con las


herramientas
> del
>> > administrador corporativo como por ejemplo el asistente de paquetes


de
>> > transformación de datos o que si no tengo que hacer un lio con


cursores
>> > FETCH.
>> > ¿Sigo con el Procedimiento almacenado (que os ruego reviséis), me


meto
> con
>> > FETCH, o es más facil con los asistentes?
>> >
>> > Gracias
>> >
>>
>


____________________________________________________________________________
>> > ________________
>> >
>> > CREATE PROCEDURE [pa_clientes_nuevaTabla] AS
>> > DECLARE @cliente integer,@pedido1 integer, @factura1 integer,


@pedido2
>> > integer, @factura2 integer, @pedido3 integer, @factura3 integer
>> >
>> > select @cliente=cliente,@pedido1=pedido1,
>> > @factura1=factura1,@pedido2=pedido2,
> @factura2=factura2,@pedido3=pedido3,
>> > @factura3=factura3 from TABLACLIENTES
>> >
>> > IF (@factura1<>0) insert into NUEVATABLA
>> > (cliente,pedido,factura,numero)


values(@cliente,@pedido,@factura,'1')
>> > IF (@factura2<>0) insert into NUEVATABLA
>> > (cliente,pedido,factura,numero)


values(@cliente,@pedido,@factura,'2')
>> > IF (@factura3<>0) insert into NUEVATABLA
>> (cliente,pedido,factura,numero)
>> > values(@cliente,@pedido,@factura,'3')
>> >
>> >
>> > GO
>> >
>> >
>>
>>
>>
>> Outgoing mail is certified Virus Free.
>> Checked by AVG anti-virus system (http://www.grisoft.com).
>> Version: 6.0.698 / Virus Database: 455 - Release Date: 02/06/2004
>>
>>

Respuesta Responder a este mensaje
#5 Liliana Sorrentino
17/06/2004 - 19:53 | Informe spam
Ay... Fernando...! ¿Caducó tu suscripción a la Brigada Anti_Cursores y
Miguel no te la renovó?

"Fernando España" escribió en el mensaje
news:#
declare @cliente char(x)

declare lista_clientes cursor for
select distinct cliente from
vieja order by cliente

open lista_clientes

fetch lista_clientes into @cliente

while @@fetch_status=0
Begin
insert nueva
select cliente,pedido1 from vieja
where cliente=@cliente
insert nueva
select cliente,pedido2 from vieja
where cliente=@cliente
insert nueva
select cliente,pedido2 from vieja
where cliente=@cliente

.. hasta terminar campos.

fetch lista_clientes into @cliente
End
close lista_clientes
deallocate lista_clientes





Fernando España
Gerente Informatica
Alta Tecnologia en Informatica S.A.
www.atisa.com.gt
7a. calle 4-34 Zona 10
Guatemala Centro America
PBX: (502) 3620005

Email:

****************************************

"joselitux" escribió en el mensaje
news:
> No puedo usar insert into porque el orden es importante.
> Es decir, que debo insertar factura 1, dos y tres correlativamente para
> que tengan in identity lo más próximo posible.
>
> On Thu, 17 Jun 2004
> 13:12:31 -0300, Guido wrote:
>
> > Algo asi:
> > INSERT INTO Nueva
> > SELECT CLIENTE, PEDIDO1, FACTURA1, 1 AS NUMERO
> > FROM VIEJA
> >
> > despues cambias los unos por doses y treses y la ejecutas de nuevo.
> >
> > Guido
> > Insetec
> > La Plata Argentina
> >
> > "Maxi" escribió en el mensaje
> > news:%
> >> Hola, y porque no usar Insert into?
> >>
> >> o sea:
> >>
> >> Insert into tabladestino (campos)
> >> Select campos from tablaorigen
> >>
> >> Asi deberias hacerlo
> >>
> >>
> >> Salu2
> >> Maxi
> >> Buenos Aires - Argentina
> >> Desarrollador Microsoft 3 Estrellas .NET
> >> Nunca consideres el estudio como una obligación sino como
> >> una oportunidad para penetrar en el bello y maravillosos
> >> mundo del saber.
> >> - Albert Einstein
> >>
> >>
> >>
> >> "Jomaweb" escribió en el mensaje
> >> news:uop$
> >> > Hola
> >> >
> >> > tengo la siguiente tabla:
> >> >
> >> > CLIENTE PEDIDO1 FACTURA1 PEDIDO2 FACTURA2 PEDIDO3
> >> > FACTURA3
> >> >
> >> > y quiero pasar sus datos a esta otra:
> >> >
> >> > CLIENTE PEDIDO FACTURA NUMERO
> >> >
> >> > El campo NUMERO es el que me permitirá determinar si es la factura


1
,
> > la
> >> 2
> >> > o la 3. En principio iba así porque no era posible que un cliente
> > tuviera
> >> > más de tres facturas a la misma vez. Pueden existir clientes con


solo
un
> >> > pedido, con dos o con tres. Mínimo siempre uno.
> >> >
> >> > Lo intento con un procedimiento almacenado (que adjunto al final


del
> >> texto)
> >> > pero solamente me pasa el primer cliente.
> >> > Me han dicho que visualmente es más facil hacerlo con las
herramientas
> > del
> >> > administrador corporativo como por ejemplo el asistente de paquetes
de
> >> > transformación de datos o que si no tengo que hacer un lio con
cursores
> >> > FETCH.
> >> > ¿Sigo con el Procedimiento almacenado (que os ruego reviséis), me
meto
> > con
> >> > FETCH, o es más facil con los asistentes?
> >> >
> >> > Gracias
> >> >
> >>
> >



____________________________________________________________________________
> >> > ________________
> >> >
> >> > CREATE PROCEDURE [pa_clientes_nuevaTabla] AS
> >> > DECLARE @cliente integer,@pedido1 integer, @factura1 integer,
@pedido2
> >> > integer, @factura2 integer, @pedido3 integer, @factura3 integer
> >> >
> >> > select @cliente=cliente,@pedido1=pedido1,
> >> > @factura1=factura1,@pedido2=pedido2,
> > @factura2=factura2,@pedido3=pedido3,
> >> > @factura3=factura3 from TABLACLIENTES
> >> >
> >> > IF (@factura1<>0) insert into NUEVATABLA
> >> > (cliente,pedido,factura,numero)
values(@cliente,@pedido,@factura,'1')
> >> > IF (@factura2<>0) insert into NUEVATABLA
> >> > (cliente,pedido,factura,numero)
values(@cliente,@pedido,@factura,'2')
> >> > IF (@factura3<>0) insert into NUEVATABLA
> >> (cliente,pedido,factura,numero)
> >> > values(@cliente,@pedido,@factura,'3')
> >> >
> >> >
> >> > GO
> >> >
> >> >
> >>
> >>
> >>
> >> Outgoing mail is certified Virus Free.
> >> Checked by AVG anti-virus system (http://www.grisoft.com).
> >> Version: 6.0.698 / Virus Database: 455 - Release Date: 02/06/2004
> >>
> >>
>


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