Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   SQL con campos de dos tablas (https://www.clubdelphi.com/foros/showthread.php?t=52166)

mateamargo 12-01-2008 03:58:30

SQL con campos de dos tablas
 
Hola,
Les planteo lo que necesito:
Basicamente tengo 2 tablas articulos y precios.
Articulos:
codigo_art
descripcion

Precios:
codigo_art
codigo_lista
precio_lista

Tengo los siguientes datos:

Articulos :
codigo_art descripcion
1 articulo nro 1
2 articulo nro 2

Precios
codigo_art codigo_lista precio_lista
1 1 50.00
2 2 85.00

archivo que quiero obtener despues de la ejecución del sql

codigo_art descripcion precio1 (el de la lista1) precio2 (el de la lista2)
1 articulo nro 1 50.00 0.00
2 articulo nro 2 0.00 85.00

Desde ya muchas gracias por vuestro tiempo.
Saludos :rolleyes:

AzidRain 12-01-2008 05:43:08

No esta muy clara tu descripcion de las tablas...si las explicas sería más fácil.

ecch 12-01-2008 08:54:07

Si estan en una maquina Sql
 
Cita:

Empezado por mateamargo (Mensaje 257703)
Hola,
Les planteo lo que necesito:
Basicamente tengo 2 tablas articulos y precios.
Articulos:
codigo_art
descripcion

Precios:
codigo_art
codigo_lista
precio_lista

Tengo los siguientes datos:

Articulos :
codigo_art descripcion
1 articulo nro 1
2 articulo nro 2

Precios
codigo_art codigo_lista precio_lista
1 1 50.00
2 2 85.00

archivo que quiero obtener despues de la ejecución del sql

codigo_art descripcion precio1 (el de la lista1) precio2 (el de la lista2)
1 articulo nro 1 50.00 0.00
2 articulo nro 2 0.00 85.00

Desde ya muchas gracias por vuestro tiempo.
Saludos :rolleyes:


Mi opinion es que si necesitas dos Listas de precios lo trabajes a Nivel de Campo y no de registro. de esa forma tu construccion sql seria mas sencilla y no complicas al motor de Base de Datos. Es decir la estructura de la segunda tabla yo la cambiaria por la siguiente:

Precios
codigo_art precio_lista1 precio_lista2
1 50.00 0.00
2 0.00 85.00

Luego ya puedes hacer la construccion SQL

SELECT a.cod_art, a.descripcion, b.precio_lista1, b.precio_lista2
FROM Articulos a, Precios b
WHERE a.cod_art = b.cod_art

Tal como esta tu estructura, se podria intentar algo como esto, pero no lo he comprobado, seria cuestion de ponerlo en una base de datos y probarlo, (el (+) es para hace un outher Join, habria que ver como se hace en el dialecto de tu base de datos)

SELECT a.cod_art, a.descripcion, b.precio_lista precio1, c.precio_lista precio2
FROM Articulos a, Precios b, Precios c
WHERE a.cod_art = b.cod_art AND a.cod_art = c.cod_art AND b.codigo_lista(+) = c.codigo_lista

Bueno Es una idea, espero te sirva de algo, aunque la estructura de tu Lista de precios no acaba de convencerme.

Suerte

mateamargo 12-01-2008 09:27:22

Estructura de Tabla de Lista de Precios
 
Hola,
Gracias por las respuestas.
Al ultimo mensaje debo decirle que ,
lo que tu me decis funciona pero con una limitación muy importante, que pasa si tengo 100 listas de precios pero solamente el cliente usa 5 por ejemplo voy a defnir campos en la tabla que me van a ocupar un espacio enorme que no se va a utilizar jamas ocupando un espacio innecesario y complcando el mantenimiento de la lista de precios, (ej. formularios de manteniminto). etc.

mateamargo 12-01-2008 09:31:03

Consulta SQL
 
Cita:

Empezado por AzidRain (Mensaje 257713)
No esta muy clara tu descripcion de las tablas...si las explicas sería más fácil.

Lo que tengo es una tabla de articulos y una de precios
en la de articulos el codigo y la descripcion
En la de precios el codigo de articulo, el codigo de la lista de precios y valor del precio para esa lista.

Quiero ejecutar una consulta que me devuelva para cada articulo lo siguiente:
un registro para cada articulo que tenga la siguiente información:
codigo de articulo,descripcion,precio de la lista1 , precio de la lista 2

Desde ya muchas gracias
:)

ContraVeneno 12-01-2008 16:40:49

Código SQL [-]
Select A.Articulo, 
case when P.Lista = 1 then P.Precio else 0 end Precio1,
case when P.Lista = 2 then P.Precio else 0 end Precio2
From Articulos A
Join Precios P on P.Articulo = A.Articulo

O tambien:

Código SQL [-]
Select A.Articulo, P1.Precio, P2.Precio
From Articulos A
left outer Join Precios P1 on P1.Articulo = A.Articulo and P1.Lista = 1
left outer Join Precios P2 on P2.Articulo = A.Articulo and P2.Lista = 2

Eso es en SQL server....

mateamargo 13-01-2008 22:28:51

Muchisimas gracias.
Anduvo perfecto.
La 1er. opcion funciona cuando hay match en ambas tablas, las segundas funciona para todos los articulos y lo único que hay que tener en cuenta que cuando no hay precios para na lista determinada convertir el null en 0.
Es un placer pertenecer a esta comunidad.
Un abrazo

ContraVeneno 14-01-2008 15:51:35

es que a la primer opción se me olvidó ponerle "left outer" antes del join... pero en sí es lo mismo.


La franja horaria es GMT +2. Ahora son las 18:34:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi