SQL - una "sencilla" consulta en SQL

 
Vista:

una "sencilla" consulta en SQL

Publicado por tecnorama (2 intervenciones) el 05/04/2001 20:48:29
Bueno pues ahí mi pregunta (abrochénse los cinturones):

Tengo 3 tablas:

1.- modelos: donde se guardan los modelos
2.- colores: donde se guardan los colores
3.- precios: donde se asigna el precio de cada modelo para color

El usuario podrá escoger varios modelos y 3 colores.

La consulta tiene que generar un recordset que tenga como campos:

1.- el nombre del modelo(conteniendo como registros los nombres de los modelos)
2.- el nombre del primer color (conteniendo como registros los precios del modelo seleccionado para ese color)
3.- el nombre del segundo color (conteniendo como registros los precios del modelo seleccionado para ese color)
4.- el nombre del tercer color (conteniendo como registros los precios del modelo seleccionado para ese color)

Un ejemplo:
supongamos que el usuario ha seleccionado consultar los modelos Ford, Opel y BMW con los colores rojo, verde y azul. Se debería generar una tabla como esta:

Modelo | Rojo | Verde | Azul |

Ford |2.000 |4.000 |4.500 |

Opel |2.000 |14.200 |14.000 |

BMW |12.000 |14.200 |50.000 |

Ah, y no sólo eso, sino que tiene que ordenar por los precios de los 3 colores elegidos: En el ejemplo, mostrar los modelos de más barato a más caro para el color rojo y, en caso de igual precio, ordenar por el verde.

Y puestos a pedir... ¿qué tal si no muestra los modelos para los que no exista alguno de los colores seleccionados ó su precio?

Facílisimo, vamos...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

muy fácil!

Publicado por Mario (2 intervenciones) el 06/04/2001 15:48:43
Tal como me lo dices viene a ser algo así no?:

Modelos(idModelo,descripcionModelo,c3,c4,...)
Colores(idColor,color,c3,c4,....)
Precios_relacion_modelo_color(idModelo,idColor,precio)
El precio en esta tabla sería el atributo de la relación entre Modelos y colores. Esta relación es claramente M a N.

Select descripcionModelo,color,precio
from modelos m, colores c ,Precios_relacion_modelo_color p
where m.idmodelo = p.idmodelo and c.idcolor = p.idcolor and {ahora vienen los parámetros de la consulta, los modelos que queremos sacar} (descripcionmodelo = modeloquequeremos or descripcionmodelo = modeloquequeremos or ....)

y si quisieramos unos determinados colores añadiríamos: and (color = colorquequeremos or color = colorquequeremos or ...)

Y ya está.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:muy fácil! (mmm, no es eso...)

Publicado por tecnorama (2 intervenciones) el 07/04/2001 23:41:14
Tu consulta me devolvería una tabla con tres campos: modelo, color y precio, repitiendo los registros del modelo en caso de haber más de un color seleccionado y viceversa.
Pero de lo que se trata es de que los colores seleccionados se comviertan en CAMPOS de la tabla, teniendo cada campo de color como registros los precios correspondientes al modelo de esa linea.
He estado pensando en 2 soluciones (que probaré estos días si no me recomiendas lo contrario:
1.- ¿Es posible, a través de un alias generar 3 campos a partir de uno solo?. Me explico: ¿es posible algo como esto?:
SELECT Colores.IDColor color1, Colores.IDColor color2, Colores.IDColor color3
Si fuera posible, ¿podría utilizar estos alias en las condicioones de la consulta?

La 2ª opción es más chapucera: generar 3 tablas gemelas para los colores, cambiando sólo el nombre, y poder utilizar una para cada campo del resultado (Lo sé, es una chapuza, pero no se me ocurre nada más...)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:una

Publicado por Christian A. Valeria Celedón (3 intervenciones) el 14/04/2001 10:12:22
Creo que una consulta de referencias cruzadas te podría servir. Este tipo de consulta están implementadas dentro de Access, pero no sé si otros motores lo permiten. En todo caso te mandé un pequeño ejemplo por correo.

Espero que te sirva...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:una

Publicado por Marco Antonio Santos Cruz (1 intervención) el 19/04/2001 19:16:14
Yo he hecho algo asi en SQL SERVER 7, ojala te sirva:

Supongamos que tienes la siguiente tabla:

Annio Periodo Monto
---- ------- ------
1990 1 1.1
1990 2 1.2
1990 3 1.3
1990 4 1.4
1991 1 2.1
1991 2 2.2
1991 3 2.3
1991 4 2.4

La siguiente consulta te genera el set como lo deseas, es decir, los periodos pasan a ser campos en el resultado de la consulta:

SELECT Annio,

SUM(CASE Periodo WHEN 1 THEN Monto ELSE 0 END) AS P1,

SUM(CASE Periodo WHEN 2 THEN Monto ELSE 0 END) AS P2,

SUM(CASE Periodo WHEN 3 THEN Monto ELSE 0 END) AS P3,

SUM(CASE Periodo WHEN 4 THEN Monto ELSE 0 END) AS P4

FROM Tabla

GROUP BY Annio

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar