Consulta sencillamente complicada

09/08/2004 - 23:38 por Julio Rossi | Informe spam
Hola amigos del grupo. A ver si me dan una mano con esta consulta que no le
encuentro salida a pesar de que parece sencilla.

Tengo una tabla AR_ESCALAS con la siguiente estructura y valores

in_escala (int)
1
2
3
4
5
10

y una tabla VT_VENTAS con la siguiente estructura y valores
id_cliente (int) in_escala (int) nu_importe dec(14,2)
1 1 10.22
2 4 15.63
1 3 14.10
7 5 40.22

Necesito extraer todos los valores de la columna in_escala de la tabla
AR_ESCALAS con una columna adicional que contenga el importe o cero (o Null)
de un código de cliente en particular, es decir por ejemplo para el cliente
1 debo obtener:
1 10.22
2 null
3 14.10
4 null
5 null
10 null

Espero se entienda. Un gracias desde ya a quién pueda ayudarme

Julio Rossi

Preguntas similare

Leer las respuestas

#6 Pedro Pérez
10/08/2004 - 15:06 | Informe spam
Creo que debes utilizar el CROSS JOIN

"Julio Rossi" wrote in message
news:%
Hola Maxi y gracias por la respuesta! Se ve que trabajamos desde


temprano!!
Ahora bien, el valor 4 debería devolver NULL porque pertenece al cliente 2


y
yo pido por el cliente 1.
A ver si aclaro más. Yo necesito como resultado, la tabla AR_ESCALAS
exactamente igual a como está, pero con una columna adicional que traiga


los
valores que coincidan de la tabla VT_VENTAS según el campo in_escala, pero
para un cliente en particular. En el ejemplo el 1. Por eso el 4 debería
tener NULL, porque existe solamente para el cliente 2.
La tabla AR_ESCALA es una tabla de kilos (de 1 a 100) y la tabla VT_VENTAS
es donde se guardan los precios por kilo de todos los clientes, pero solo


de
algunos valores de la escala. Lo que necesito es poder mostrarle al


usuario
toda la escala de kilos de un solo cliente con los valores ya cargados y


el
resto en cero.
Entonces para ese cliente:
Valor de AR_ESCALA Coincide en VT_VENTAS Valor devuelto
1 1- SI
10.22
2 2- NO
null
3 3- SI
14.10
4 4- NO
null
5 5- NO
null
10 10- NO
null

ya aclaré en el asunto... no es fácil...

Un saludo y gracias de nuevo

Julio Rossi


"MAXI" escribió en el mensaje
news:
> Julio de ser asi hay algo mal, fijate que el numero 4 le pones un null
> cuando en realidad hay un 15.63.
>
> Pero salvando ese error que seguramente fue de tipeo, podrias hacer algo
asi
> como
>
>
> SELECT AR_ESCALAS.IN_ESCALA,VT_VENTAS.NU_IMPORTE FROM
> AR_ESCALAS LEFT JOIN VT_VENTAS ON
> AR_ESCALAS.IN_ESCALA = VT_VENTAS.IN_ESCALA
>
> Suerte
>
>
>
>
> Maxi
>
> Buenos Aires - Argentina
> Desarrollador .NET 3 Estrellas
> Mail: Maxi_accotto[arroba]speedy.com.ar
> Msn Messager:
>
> "Julio Rossi" escribió en el mensaje
> news:
> > Si Maxi, con gusto. Los resultados son:
> > Los de la primera columna el campo in_escala de la tabla AR_ESCALAS
> > Los de la segunda columna el campo nu_importe de la tabla VT_VENTAS
> >
> > La relación entre una tabla y otra es por el campo in_escala y el


filtro
> es
> > por la tabla VT_VENTAS por el campo id_cliente.
> >
> > Gracias de nuevo.
> >
> > Julio Rossi
> >
> >
> > "MAXI" escribió en el mensaje
> > news:
> > > la verdad no entendi como llegastes a los resultados, podrias
explicarlo
> > > mejor?
> > >
> > >
> > >
> > >
> > > Maxi
> > >
> > > Buenos Aires - Argentina
> > >
> > > Desarrollador .NET 3 Estrellas
> > >
> > > Mail: Maxi_accotto[arroba]speedy.com.ar
> > >
> > > Msn Messager:
> > >
> > >
> > > "Julio Rossi" escribió en el mensaje
> > > news:
> > > > Hola amigos del grupo. A ver si me dan una mano con esta consulta
que
> no
> > > le
> > > > encuentro salida a pesar de que parece sencilla.
> > > >
> > > > Tengo una tabla AR_ESCALAS con la siguiente estructura y valores
> > > >
> > > > in_escala (int)
> > > > 1
> > > > 2
> > > > 3
> > > > 4
> > > > 5
> > > > 10
> > > >
> > > > y una tabla VT_VENTAS con la siguiente estructura y valores
> > > > id_cliente (int) in_escala (int) nu_importe dec(14,2)
> > > > 1 1 10.22
> > > > 2 4 15.63
> > > > 1 3 14.10
> > > > 7 5 40.22
> > > >
> > > > Necesito extraer todos los valores de la columna in_escala de la
tabla
> > > > AR_ESCALAS con una columna adicional que contenga el importe o


cero
(o
> > > Null)
> > > > de un código de cliente en particular, es decir por ejemplo para


el
> > > cliente
> > > > 1 debo obtener:
> > > > 1 10.22
> > > > 2 null
> > > > 3 14.10
> > > > 4 null
> > > > 5 null
> > > > 10 null
> > > >
> > > > Espero se entienda. Un gracias desde ya a quién pueda ayudarme
> > > >
> > > > Julio Rossi
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#7 Julio Rossi
10/08/2004 - 16:54 | Informe spam
Si Javier, es exactamente lo que necesitaba!! Yo intentaba con la cláusula
WHERE indicándole el código del cliente, pero no obtenía los resultados
correctos.
Mil gracias nuevamente.

Julio Rossi



"Javier Loria" escribió en el mensaje
news:
Hola Julio:
Bueno espero haber entendido, para el cliente 1:
> SELECT AR_ESCALAS.in_escala
, VT_VENTAS.nu_importe
FROM AR_ESCALAS
LEFT JOIN VT_VENTAS
ON AR_ESCALAS.in_escala=VT_VENTAS.in_escala
AND VT_VENTAS.id_cliente=1
=> 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
Respuesta Responder a este mensaje
#8 Julio Rossi
10/08/2004 - 16:55 | Informe spam
Gracias Pedro, pero la solución de Javier Loria de este mismo hilo funciona
perfectamente.
Saludos cordiales.

Julio Rossi



"Pedro Pérez" escribió en el mensaje
news:#
Creo que debes utilizar el CROSS JOIN

"Julio Rossi" wrote in message
news:%
> Hola Maxi y gracias por la respuesta! Se ve que trabajamos desde
temprano!!
> Ahora bien, el valor 4 debería devolver NULL porque pertenece al cliente


2
y
> yo pido por el cliente 1.
> A ver si aclaro más. Yo necesito como resultado, la tabla AR_ESCALAS
> exactamente igual a como está, pero con una columna adicional que traiga
los
> valores que coincidan de la tabla VT_VENTAS según el campo in_escala,


pero
> para un cliente en particular. En el ejemplo el 1. Por eso el 4 debería
> tener NULL, porque existe solamente para el cliente 2.
> La tabla AR_ESCALA es una tabla de kilos (de 1 a 100) y la tabla


VT_VENTAS
> es donde se guardan los precios por kilo de todos los clientes, pero


solo
de
> algunos valores de la escala. Lo que necesito es poder mostrarle al
usuario
> toda la escala de kilos de un solo cliente con los valores ya cargados y
el
> resto en cero.
> Entonces para ese cliente:
> Valor de AR_ESCALA Coincide en VT_VENTAS Valor devuelto
> 1 1- SI
> 10.22
> 2 2- NO
> null
> 3 3- SI
> 14.10
> 4 4- NO
> null
> 5 5- NO
> null
> 10 10- NO
> null
>
> ya aclaré en el asunto... no es fácil...
>
> Un saludo y gracias de nuevo
>
> Julio Rossi
>
>
> "MAXI" escribió en el mensaje
> news:
> > Julio de ser asi hay algo mal, fijate que el numero 4 le pones un null
> > cuando en realidad hay un 15.63.
> >
> > Pero salvando ese error que seguramente fue de tipeo, podrias hacer


algo
> asi
> > como
> >
> >
> > SELECT AR_ESCALAS.IN_ESCALA,VT_VENTAS.NU_IMPORTE FROM
> > AR_ESCALAS LEFT JOIN VT_VENTAS ON
> > AR_ESCALAS.IN_ESCALA = VT_VENTAS.IN_ESCALA
> >
> > Suerte
> >
> >
> >
> >
> > Maxi
> >
> > Buenos Aires - Argentina
> > Desarrollador .NET 3 Estrellas
> > Mail: Maxi_accotto[arroba]speedy.com.ar
> > Msn Messager:
> >
> > "Julio Rossi" escribió en el mensaje
> > news:
> > > Si Maxi, con gusto. Los resultados son:
> > > Los de la primera columna el campo in_escala de la tabla AR_ESCALAS
> > > Los de la segunda columna el campo nu_importe de la tabla VT_VENTAS
> > >
> > > La relación entre una tabla y otra es por el campo in_escala y el
filtro
> > es
> > > por la tabla VT_VENTAS por el campo id_cliente.
> > >
> > > Gracias de nuevo.
> > >
> > > Julio Rossi
> > >
> > >
> > > "MAXI" escribió en el mensaje
> > > news:
> > > > la verdad no entendi como llegastes a los resultados, podrias
> explicarlo
> > > > mejor?
> > > >
> > > >
> > > >
> > > >
> > > > Maxi
> > > >
> > > > Buenos Aires - Argentina
> > > >
> > > > Desarrollador .NET 3 Estrellas
> > > >
> > > > Mail: Maxi_accotto[arroba]speedy.com.ar
> > > >
> > > > Msn Messager:
> > > >
> > > >
> > > > "Julio Rossi" escribió en el mensaje
> > > > news:
> > > > > Hola amigos del grupo. A ver si me dan una mano con esta


consulta
> que
> > no
> > > > le
> > > > > encuentro salida a pesar de que parece sencilla.
> > > > >
> > > > > Tengo una tabla AR_ESCALAS con la siguiente estructura y valores
> > > > >
> > > > > in_escala (int)
> > > > > 1
> > > > > 2
> > > > > 3
> > > > > 4
> > > > > 5
> > > > > 10
> > > > >
> > > > > y una tabla VT_VENTAS con la siguiente estructura y valores
> > > > > id_cliente (int) in_escala (int) nu_importe dec(14,2)
> > > > > 1 1 10.22
> > > > > 2 4 15.63
> > > > > 1 3 14.10
> > > > > 7 5 40.22
> > > > >
> > > > > Necesito extraer todos los valores de la columna in_escala de la
> tabla
> > > > > AR_ESCALAS con una columna adicional que contenga el importe o
cero
> (o
> > > > Null)
> > > > > de un código de cliente en particular, es decir por ejemplo para
el
> > > > cliente
> > > > > 1 debo obtener:
> > > > > 1 10.22
> > > > > 2 null
> > > > > 3 14.10
> > > > > 4 null
> > > > > 5 null
> > > > > 10 null
> > > > >
> > > > > Espero se entienda. Un gracias desde ya a quién pueda ayudarme
> > > > >
> > > > > Julio Rossi
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#9 Javier Loria
10/08/2004 - 17:45 | Informe spam
Hola:
Me alegro mucho te sirviera.
Ha algunas personas les gusta mas escribirlo como una subconsulta, que
se ve un poco mas claro (pero mas largo).
=SELECT AR_ESCALAS.in_escala
, VentasCliente1.nu_importe
FROM AR_ESCALAS
LEFT JOIN (SELECT VT_VENTAS.in_escala
, VT_VENTAS.nu_importe
FROM VT_VENTAS
WHERE VT_VENTAS.id_cliente=1)
AS VentasCliente1
ON AR_ESCALAS.in_escala=VentasCliente1.in_escala
= 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

"Julio Rossi" wrote in message
news:
Si Javier, es exactamente lo que necesitaba!! Yo intentaba con la cláusula
WHERE indicándole el código del cliente, pero no obtenía los resultados
correctos.
Mil gracias nuevamente.

Julio Rossi



"Javier Loria" escribió en el mensaje
news:
> Hola Julio:
> Bueno espero haber entendido, para el cliente 1:
> > > SELECT AR_ESCALAS.in_escala
> , VT_VENTAS.nu_importe
> FROM AR_ESCALAS
> LEFT JOIN VT_VENTAS
> ON AR_ESCALAS.in_escala=VT_VENTAS.in_escala
> AND VT_VENTAS.id_cliente=1
> => > 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




Respuesta Responder a este mensaje
#10 Julio Rossi
10/08/2004 - 20:45 | Informe spam
Hola Javier: muy completa tu explicación que también recupera los mismos
resultados correctamente; aunque me inclino por la primera, aplicando el
dicho que dice 'lo bueno, si breve, dos veces bueno'.
Un cordial saludo y gracias nuevamente.

Julio Rossi



"Javier Loria" escribió en el mensaje
news:
Hola:
Me alegro mucho te sirviera.
Ha algunas personas les gusta mas escribirlo como una subconsulta, que
se ve un poco mas claro (pero mas largo).
=> SELECT AR_ESCALAS.in_escala
, VentasCliente1.nu_importe
FROM AR_ESCALAS
LEFT JOIN (SELECT VT_VENTAS.in_escala
, VT_VENTAS.nu_importe
FROM VT_VENTAS
WHERE VT_VENTAS.id_cliente=1)
AS VentasCliente1
ON AR_ESCALAS.in_escala=VentasCliente1.in_escala
=> 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

"Julio Rossi" wrote in message
news:
> Si Javier, es exactamente lo que necesitaba!! Yo intentaba con la


cláusula
> WHERE indicándole el código del cliente, pero no obtenía los resultados
> correctos.
> Mil gracias nuevamente.
>
> Julio Rossi
>
>
>
> "Javier Loria" escribió en el mensaje
> news:
> > Hola Julio:
> > Bueno espero haber entendido, para el cliente 1:
> > > > > SELECT AR_ESCALAS.in_escala
> > , VT_VENTAS.nu_importe
> > FROM AR_ESCALAS
> > LEFT JOIN VT_VENTAS
> > ON AR_ESCALAS.in_escala=VT_VENTAS.in_escala
> > AND VT_VENTAS.id_cliente=1
> > => > > 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
>
>
>
>


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