Ayuda con cursor

10/12/2004 - 23:35 por Carlos | Informe spam
Cordial Saludo.

Debo crear un cursor y no se como hacerlo, es de acuerdo a este bosquejo:

Codigo upc caja tiquete trans
8 0000000032759 0 14 12
9 0000000032764 0 14 12
10 0000000032754 0 14 12
11 0000000032762 0 14 12
12 0000000032756 3 14 12
13 0000000032768 3 14 12

Se deben comparar tres tablas, eso me sale bien, por problemas con el
software que compraron sale esa inconsistencia de los 0 y no hay poder humano
que lo hagan cambiar; debo hacer que esos 0 queden con el mismo numero de
caja de acuerdo al tiquete y al trans que son las llaves.

Me dijeron que lo hiciera en un cursor pero no se como hacerlo, creo que es
mucha vuelta.

Agradezco la ayuda y sugerencias que me puedan brindar.

Preguntas similare

Leer las respuestas

#1 MAXI
10/12/2004 - 23:47 | Informe spam
Hola, el uso de cursores es una tecnica no recomendada en lo absoluto porque
es muy lenta. Ahora bien si me cuentas mejor que quieres hacer y nos puedes
pasar alguna extructura con algunos ejemplos de lo que necesitas te vamos a
poder ayudar a resolverlo sin cursores :)

La persona que te dijo que lo hagas con cursores no tiene el conocimiento
adecuado en la materia y por eso te recomendo eso, antes de decidir si hay q
usar un cursor hay que acabar todas las otras instancias :)




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"Carlos" escribió en el mensaje
news:
Cordial Saludo.

Debo crear un cursor y no se como hacerlo, es de acuerdo a este bosquejo:

Codigo upc caja tiquete trans
8 0000000032759 0 14 12
9 0000000032764 0 14 12
10 0000000032754 0 14 12
11 0000000032762 0 14 12
12 0000000032756 3 14 12
13 0000000032768 3 14 12

Se deben comparar tres tablas, eso me sale bien, por problemas con el
software que compraron sale esa inconsistencia de los 0 y no hay poder
humano
que lo hagan cambiar; debo hacer que esos 0 queden con el mismo numero de
caja de acuerdo al tiquete y al trans que son las llaves.

Me dijeron que lo hiciera en un cursor pero no se como hacerlo, creo que
es
mucha vuelta.

Agradezco la ayuda y sugerencias que me puedan brindar.
Respuesta Responder a este mensaje
#2 Carlos
11/12/2004 - 00:35 | Informe spam
Cordial Saludo MAXI.
Bueno para empezar se maneja cuatro tablas: dbo_register_trans,Products
pro,comisioncarnes com

Este es un ejemplo de como queda algunos campos deun select que describo abajo

upc salesman till_no trans_no
0000000032756 3 14 12
0000000032768 3 14 12

select reg.salesman,reg.emp_no,reg.trans_no,reg.till_no, reg.upc,
pro.description,sum(reg.quantity) as cantidad, sum(reg.total) as total
into ##TmpBusqueda
from dbo_register_trans reg,Posbdat..Products
pro,comfamiliar..comisioncarnes com
where reg.proc_date between '12/08/2004' and '12/08/2004'
and reg.upc=pro.upc and reg.salesman in(1,2,3,4,5) and
reg.upc=com.upc and com.upc=pro.upc group by
reg.salesman,reg.emp_no,reg.trans_no,
reg.till_no,reg.upc,pro.description
order by reg.trans_no

Ahora debo hacer otro selecto pero cuando salesman not in(1,2,3,4,5) pero es
el mismo codigo de arriba solo cambia la condicion; con la misma transaccion
upc salesman till_no trans_no
0000000032759 0 14 12
0000000032764 0 14 12
0000000032754 0 14 12
0000000032762 0 14 12

Como pueden ver el till_no y el trans_no son iguales pero el salesman es 0;
el programa que compraron y nopiensan cambiar, a veces guarda el salesman
bien y a veces lo guarda con 0; la tarea es como hago para que quede todo
correcto me refiero a esto:
upc salesman till_no trans_no
0000000032759 3 14 12
0000000032764 3 14 12
0000000032754 3 14 12
0000000032762 3 14 12
0000000032756 3 14 12
0000000032768 3 14 12

Como lo podria hacer??
Como pueden ver en esa consulta mando esos valores a ##Busqueda, y la otra
consulta que cambio la condicion in(1,2,3,4,5) a not in la mando a
##tmpBusqueda1 y comparo las dos pero eso es un enredo total, llevo 2 dias en
esto y no he podido hacer que me funciones.

Espero haber podido explicarme bien.

Agradezco mucho la ayuda que me puedan facilitar
Respuesta Responder a este mensaje
#3 MAXI
11/12/2004 - 14:39 | Informe spam
Hola carlos, me imagino que vale 3 porque lo estas sacando del primer query
y lo estas vinculando con los campos: trans_no y till_no

con lo cual podriamos armar un update mas o menos asi

UPDATE TABLE SET SALESMAN = T2.SALESMAN
FROM TABLA , (SELECT * FROM TABLA WHERE SALESMAN <> 0) T2
WHERE T2.TILL_NO = TABLA.TILL_NO AND T2.TRANS_NO = TABLA.TRANS_NO

Creo que esto te puede ser util.

pd: ojo puede tener algun error de sintaxis ya que no lo pude probar en esta
pc :(




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"Carlos" escribió en el mensaje
news:
Cordial Saludo MAXI.
Bueno para empezar se maneja cuatro tablas: dbo_register_trans,Products
pro,comisioncarnes com

Este es un ejemplo de como queda algunos campos deun select que describo
abajo

upc salesman till_no trans_no
0000000032756 3 14 12
0000000032768 3 14 12

select reg.salesman,reg.emp_no,reg.trans_no,reg.till_no, reg.upc,
pro.description,sum(reg.quantity) as cantidad, sum(reg.total) as
total
into ##TmpBusqueda
from dbo_register_trans reg,Posbdat..Products
pro,comfamiliar..comisioncarnes com
where reg.proc_date between '12/08/2004' and '12/08/2004'
and reg.upc=pro.upc and reg.salesman in(1,2,3,4,5) and
reg.upc=com.upc and com.upc=pro.upc group by
reg.salesman,reg.emp_no,reg.trans_no,
reg.till_no,reg.upc,pro.description
order by reg.trans_no

Ahora debo hacer otro selecto pero cuando salesman not in(1,2,3,4,5) pero
es
el mismo codigo de arriba solo cambia la condicion; con la misma
transaccion
upc salesman till_no trans_no
0000000032759 0 14 12
0000000032764 0 14 12
0000000032754 0 14 12
0000000032762 0 14 12

Como pueden ver el till_no y el trans_no son iguales pero el salesman es
0;
el programa que compraron y nopiensan cambiar, a veces guarda el salesman
bien y a veces lo guarda con 0; la tarea es como hago para que quede todo
correcto me refiero a esto:
upc salesman till_no trans_no
0000000032759 3 14 12
0000000032764 3 14 12
0000000032754 3 14 12
0000000032762 3 14 12
0000000032756 3 14 12
0000000032768 3 14 12

Como lo podria hacer??
Como pueden ver en esa consulta mando esos valores a ##Busqueda, y la otra
consulta que cambio la condicion in(1,2,3,4,5) a not in la mando a
##tmpBusqueda1 y comparo las dos pero eso es un enredo total, llevo 2 dias
en
esto y no he podido hacer que me funciones.

Espero haber podido explicarme bien.

Agradezco mucho la ayuda que me puedan facilitar


Respuesta Responder a este mensaje
#4 Carlos
12/12/2004 - 16:57 | Informe spam
Cordial saludo MAXI.

Muy buena tu logica, no se me habia ocurrido, con esta consulta saco los
productos detallados upc(codigo) y description(nombre), ahora mi problema es
que debo sacar un total general por cajas y no me cuadra el total del
detallado con el total general este es el codigo que utilizo ahora:

select reg.salesman,reg.trans_no,reg.till_no,reg.quantity, reg.total into
##TmpBusqueda from dbo_register_trans reg,
Products pro,comisioncarnes com where reg.proc_date between '12/01/2004' and
'12/01/2004' and reg.upc=pro.upc and reg.salesman in(1,2,3,4,5) and
reg.upc=com.upc and com.upc=pro.upc group by reg.salesman,reg.trans_no,
reg.till_no,reg.quantity,reg.total order by reg.trans_no

y el otro select cambio la condicion not in(1,2,3,4,5) y el nombre de la
tabla temporal; hago el update que me sugeriste

UPDATE ##tmpBusqueda1 SET salesman = tmp1.salesman
FROM ##tmpBusqueda1 tmp, (SELECT * FROM ##tmpBusqueda WHERE salesman <> 0)
tmp1
WHERE Tmp1.till_no = tmp.till_no AND Tmp1.trans_no = tmp.trans_no

y hago un select para el total general de las cajas que no son 1,2,3,4,5

select salesman, sum(quantity), sum(total) from ##tmpbusqueda1 where
salesman=0 group by salesman
order by salesman

Pero no me coinciden el total del detallado con el general, que sugerencias
me puedes brindar??

Agradezco el tiempo que sacas para ayudarnos.

"MAXI" wrote:

Hola carlos, me imagino que vale 3 porque lo estas sacando del primer query
y lo estas vinculando con los campos: trans_no y till_no

con lo cual podriamos armar un update mas o menos asi

UPDATE TABLE SET SALESMAN = T2.SALESMAN
FROM TABLA , (SELECT * FROM TABLA WHERE SALESMAN <> 0) T2
WHERE T2.TILL_NO = TABLA.TILL_NO AND T2.TRANS_NO = TABLA.TRANS_NO

Creo que esto te puede ser util.

pd: ojo puede tener algun error de sintaxis ya que no lo pude probar en esta
pc :(




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"Carlos" escribió en el mensaje
news:
> Cordial Saludo MAXI.
> Bueno para empezar se maneja cuatro tablas: dbo_register_trans,Products
> pro,comisioncarnes com
>
> Este es un ejemplo de como queda algunos campos deun select que describo
> abajo
>
> upc salesman till_no trans_no
> 0000000032756 3 14 12
> 0000000032768 3 14 12
>
> select reg.salesman,reg.emp_no,reg.trans_no,reg.till_no, reg.upc,
> pro.description,sum(reg.quantity) as cantidad, sum(reg.total) as
> total
> into ##TmpBusqueda
> from dbo_register_trans reg,Posbdat..Products
> pro,comfamiliar..comisioncarnes com
> where reg.proc_date between '12/08/2004' and '12/08/2004'
> and reg.upc=pro.upc and reg.salesman in(1,2,3,4,5) and
> reg.upc=com.upc and com.upc=pro.upc group by
> reg.salesman,reg.emp_no,reg.trans_no,
> reg.till_no,reg.upc,pro.description
> order by reg.trans_no
>
> Ahora debo hacer otro selecto pero cuando salesman not in(1,2,3,4,5) pero
> es
> el mismo codigo de arriba solo cambia la condicion; con la misma
> transaccion
> upc salesman till_no trans_no
> 0000000032759 0 14 12
> 0000000032764 0 14 12
> 0000000032754 0 14 12
> 0000000032762 0 14 12
>
> Como pueden ver el till_no y el trans_no son iguales pero el salesman es
> 0;
> el programa que compraron y nopiensan cambiar, a veces guarda el salesman
> bien y a veces lo guarda con 0; la tarea es como hago para que quede todo
> correcto me refiero a esto:
> upc salesman till_no trans_no
> 0000000032759 3 14 12
> 0000000032764 3 14 12
> 0000000032754 3 14 12
> 0000000032762 3 14 12
> 0000000032756 3 14 12
> 0000000032768 3 14 12
>
> Como lo podria hacer??
> Como pueden ver en esa consulta mando esos valores a ##Busqueda, y la otra
> consulta que cambio la condicion in(1,2,3,4,5) a not in la mando a
> ##tmpBusqueda1 y comparo las dos pero eso es un enredo total, llevo 2 dias
> en
> esto y no he podido hacer que me funciones.
>
> Espero haber podido explicarme bien.
>
> Agradezco mucho la ayuda que me puedan facilitar
>
>



Respuesta Responder a este mensaje
#5 MAXI
13/12/2004 - 02:49 | Informe spam
Hola, sin conocer bien los datos se me hace muy dificil poder ayudarte de
forma correcta.

Pero veamos, porque creas la tabla temporal? esto es lo que no entiendo.

Porque en lugar de escribirme el select y el update no me escribes paso a
paso lo que necesitas sacar y no como lo estas sacando :)

Tambien dame un poco de extructura de tablas y algunos datos de ejemplo.

Gracias




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"Carlos" escribió en el mensaje
news:
Cordial saludo MAXI.

Muy buena tu logica, no se me habia ocurrido, con esta consulta saco los
productos detallados upc(codigo) y description(nombre), ahora mi problema
es
que debo sacar un total general por cajas y no me cuadra el total del
detallado con el total general este es el codigo que utilizo ahora:

select reg.salesman,reg.trans_no,reg.till_no,reg.quantity, reg.total into
##TmpBusqueda from dbo_register_trans reg,
Products pro,comisioncarnes com where reg.proc_date between '12/01/2004'
and
'12/01/2004' and reg.upc=pro.upc and reg.salesman in(1,2,3,4,5) and
reg.upc=com.upc and com.upc=pro.upc group by reg.salesman,reg.trans_no,
reg.till_no,reg.quantity,reg.total order by reg.trans_no

y el otro select cambio la condicion not in(1,2,3,4,5) y el nombre de la
tabla temporal; hago el update que me sugeriste

UPDATE ##tmpBusqueda1 SET salesman = tmp1.salesman
FROM ##tmpBusqueda1 tmp, (SELECT * FROM ##tmpBusqueda WHERE salesman <> 0)
tmp1
WHERE Tmp1.till_no = tmp.till_no AND Tmp1.trans_no = tmp.trans_no

y hago un select para el total general de las cajas que no son 1,2,3,4,5

select salesman, sum(quantity), sum(total) from ##tmpbusqueda1 where
salesman=0 group by salesman
order by salesman

Pero no me coinciden el total del detallado con el general, que
sugerencias
me puedes brindar??

Agradezco el tiempo que sacas para ayudarnos.

"MAXI" wrote:

Hola carlos, me imagino que vale 3 porque lo estas sacando del primer
query
y lo estas vinculando con los campos: trans_no y till_no

con lo cual podriamos armar un update mas o menos asi

UPDATE TABLE SET SALESMAN = T2.SALESMAN
FROM TABLA , (SELECT * FROM TABLA WHERE SALESMAN <> 0) T2
WHERE T2.TILL_NO = TABLA.TILL_NO AND T2.TRANS_NO = TABLA.TRANS_NO

Creo que esto te puede ser util.

pd: ojo puede tener algun error de sintaxis ya que no lo pude probar en
esta
pc :(




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"Carlos" escribió en el mensaje
news:
> Cordial Saludo MAXI.
> Bueno para empezar se maneja cuatro tablas: dbo_register_trans,Products
> pro,comisioncarnes com
>
> Este es un ejemplo de como queda algunos campos deun select que
> describo
> abajo
>
> upc salesman till_no trans_no
> 0000000032756 3 14 12
> 0000000032768 3 14 12
>
> select reg.salesman,reg.emp_no,reg.trans_no,reg.till_no, reg.upc,
> pro.description,sum(reg.quantity) as cantidad, sum(reg.total) as
> total
> into ##TmpBusqueda
> from dbo_register_trans reg,Posbdat..Products
> pro,comfamiliar..comisioncarnes com
> where reg.proc_date between '12/08/2004' and '12/08/2004'
> and reg.upc=pro.upc and reg.salesman in(1,2,3,4,5) and
> reg.upc=com.upc and com.upc=pro.upc group by
> reg.salesman,reg.emp_no,reg.trans_no,
> reg.till_no,reg.upc,pro.description
> order by reg.trans_no
>
> Ahora debo hacer otro selecto pero cuando salesman not in(1,2,3,4,5)
> pero
> es
> el mismo codigo de arriba solo cambia la condicion; con la misma
> transaccion
> upc salesman till_no trans_no
> 0000000032759 0 14 12
> 0000000032764 0 14 12
> 0000000032754 0 14 12
> 0000000032762 0 14 12
>
> Como pueden ver el till_no y el trans_no son iguales pero el salesman
> es
> 0;
> el programa que compraron y nopiensan cambiar, a veces guarda el
> salesman
> bien y a veces lo guarda con 0; la tarea es como hago para que quede
> todo
> correcto me refiero a esto:
> upc salesman till_no trans_no
> 0000000032759 3 14 12
> 0000000032764 3 14 12
> 0000000032754 3 14 12
> 0000000032762 3 14 12
> 0000000032756 3 14 12
> 0000000032768 3 14 12
>
> Como lo podria hacer??
> Como pueden ver en esa consulta mando esos valores a ##Busqueda, y la
> otra
> consulta que cambio la condicion in(1,2,3,4,5) a not in la mando a
> ##tmpBusqueda1 y comparo las dos pero eso es un enredo total, llevo 2
> dias
> en
> esto y no he podido hacer que me funciones.
>
> Espero haber podido explicarme bien.
>
> Agradezco mucho la ayuda que me puedan facilitar
>
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida