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

#6 Fernando España
17/06/2004 - 19:53 | Informe spam
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
#7 Fernando España
17/06/2004 - 20:20 | Informe spam
escribi eso por que es una forma facil y ademas supongo es algo que
necesitara hacer solo una vez para tener su nueva tabla, asi que quiza valga
la pena.. AUN SIGO SIENDO ANTI CURSORES.




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:

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

"Liliana Sorrentino" escribió en el mensaje
news:
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
#8 Javier Loria
17/06/2004 - 21:07 | Informe spam
Hola Fernando:
No me quedas mas que decirte:
ET TU, BRUTE?
Julio Cesar, Acto III.
== Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


Fernando España escribio:
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




"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
#9 Jomaweb
18/06/2004 - 08:10 | Informe spam
Hombre, yo no digo que se usen los cursores para todo, pero me parece que
cuando a uno le sirven para algo hay que usarlos.
Saludos y gracias

"Javier Loria" escribió en el mensaje
news:ej%
Hola Fernando:
No me quedas mas que decirte:
> ET TU, BRUTE?
Julio Cesar, Acto III.
==> Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


Fernando España escribio:
> 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
>
>
>
>
> "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
#10 Javier Loria
18/06/2004 - 17:13 | Informe spam
Hola Jomaweb:
Hola mi unica intencion era molestar a mi amigo Fernando, no era una
posicion seria solo "fregar". Si quieres mi respuesta seria con mucho gusto.
:D
No, no creo que haya que usar cursores para manejar la parte de SQL del
DML (Data Modification Language). Es un pesimo sintoma tener que recurrir a
ellos para solucionar problemas. Lo que te dijo Lilliana medio en broma
("son contra mi religion...") demuestra la fuerza mental que tiene ella para
no recurrir a este tipo de solucion obligandose a pensar unicamente en
conjuntos de datos y no de forma procedimental. Con esto logra desarrollar
soluciones que no requieren cursores y que son mas rapidas, mas faciles de
mantener, y entrena a su mente en este tipo de codigo.
Fernando <Broma>de ahora en adelante llamado Marcus Brutus</Broma> le
dio una solucion de cursor con lo cual te privo de esta experiencia. Yo no
queria participar en este hilo porque me parecia que lo manejaban
perfectamente pero ahora me obliga a participar.
La tabla TablaClientes rompe la primera forma Normal (1NF) que exige
que las tablas no tengan grupos repetidos y que cada columna sea
escalar/atomica y no un arrego o lista de algo. Si la normalizamos con la
siguiente vista:
=CREATE VIEW ClientesNormalizado
AS
SELECT Cliente
, Pedido1 AS Pedido
, Factura1 AS Factura
, 1 AS Orden
FROM TablaClientes
WHERE Factura1<>0
UNION ALL
SELECT Cliente, Pedido2, Factura2, 2
FROM TablaClientes
WHERE Factura2<>0
UNION ALL
SELECT Cliente, Pedido3, Factura3, 3
FROM TablaClientes
WHERE Factura3<>0
= Podemos utilzarlo como base. (Seria mejor hacerlo fisicamete)
Ahora para poder construir el INSERT (sin Identity),
=SELECT C1.Cliente
, C1.Pedido
, C1.Factura
, C1.Orden
, COUNT(*) AS SustitodeIdentity
FROM ClientesNormalizado AS C1
JOIN ClientesNormalizado AS C2
ON C1.Cliente>C2.Cliente
OR (C1.Cliente= C2.Cliente AND C1.Orden>Â.Orden)
GROUP BY C1.Cliente, C1.Pedido, C1.Factura, C1.Orden
= Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.



Jomaweb escribio:
Hombre, yo no digo que se usen los cursores para todo, pero me parece
que cuando a uno le sirven para algo hay que usarlos.
Saludos y gracias

"Javier Loria" escribió en el mensaje
news:ej%
Hola Fernando:
No me quedas mas que decirte:
>> ET TU, BRUTE?
Julio Cesar, Acto III.
==>> Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


Fernando España escribio:
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




"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 AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida