SQL - Consulta sql complicada

 
Vista:

Consulta sql complicada

Publicado por gerardo (5 intervenciones) el 01/08/2003 18:35:19
Hola!
Tengo tres tablas
Ventas: Codigo Venta
ProductosVendidos: Codigo Producto, codigo Venta, Cantidad
TiposProductos:Codigo Producto, Familia, Marca y Modelo

La tabla de ventas esta enlazada con la de productos vendidos mediante el campo codigo venta, y la tabla de productos
esta enlazada con la de tiposproductos con el codigo producto.

Quiero hacer una consulta sql de forma de que para cada familia, me retorne por pantalla el
tipoproducto que más se ha vendido.Para ello imagino que habra que buscar en los productosvendidos cada tipoproducto y sumar
las cantidades vendidas.En teoria la tabla de ventas no hace falta para la consula sql.

¿Alguien sabe como puedo realizarlo?

Un saludo!
Gerardo
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

RE:Consulta sql complicada

Publicado por Isaías Islas (5072 intervenciones) el 01/08/2003 19:27:43
Hola, digame si le funciona

-- Coloco mi SET de registros a mostrar
SET ROWCOUNT 10
-- Selecciono que columnas quiero desplegar
SELECT c.Familia, sum(b.Cantidad) as Total
-- Genero mis Joins o uniones entre tablas
FROM VENTA a INNER JOIN PRODUCTOS b ON a.Codigo Venta = b.Codigo Venta
INNER JOIN TIPOSPRODUCTOS b ON a.Codigo Producto = c.Codigo Producto
-- Ordeno Descendentemente por la columna de Total (2)
ORDER BY 2 DESC
GROUP BY c.Familia
-- Restauro mi SET de registros.
SET ROWCOUNT 0
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:Consulta sql complicada

Publicado por gerardo (5 intervenciones) el 04/08/2003 18:51:07
Lo probe pero todavia no me funcia.Pondre un ejemplo haber si me puede ayudar.
Estoy haciendo esta consulta sql, programando dentro de asp.

Tengo la siguientes tablas:

Productos Vendidos Tipos Productos
---------------------- ---------------
Codigo Producto Cantidad Codigo Producto Familia Marca Modelo
--------------- -------- --------------- ------- ----- ------
6 1 2 tv philips 3r
8 2 3 dvd sanyo dre3
2 3 6 dvd sharp zvc
2 2 8 cassette elbe vav
3 2

Dentro de la tabla de productos vendidos tengo dos campos, el codigo del producto y la cantidad.Este código
es el mismo que el codigo producto de la tabla de tipos de productos.
En la tabla de tipos de productos tengo el codigo producto, y despues la familia, marca y modelo al cual pertenece.
Entonces lo que pretendo es sacar el tipo de producto de cada familia que más se ha vendido.
El listado que saldria seria este:

Familia Marca Modelo
------- ----- -------
tv philips 3r
dvd sanyo dre3
cassette elbe vav

De los tv el que mas se ha vendido es el philips modelo 3r.El dvd que mas se ha vendido es el sanyo, que hemos vendido
2, el dvd sharp solamente hemos vendido 1, y como son de la misma familia, solo ha de aparecer el más vendido, que es
el dvd sanyo, por ultimo aparece el cassete elbe, ya que de la familia de cassetttes solo hay este.

Yo habia pensado en algo asi:
"SELECT Familia, Marca, Modelo, Sum(Cantidad) AS Total FROM TiposProductos,ProductosVendidos WHERE
TiposProductos.[Codigo Producto]=ProductosVendidos.[Codigo Producto] ORDER BY Familia"
Es una pequeña aproximacion, pero no precisamente esto.Si le pongo en el SELECT la SUM(Cantidad) me da error, me dice
que me falta la funcion de agregado de familia o algo asi, si solo le pondo Cantidad, me lo imprime por pantalla bien
aunque por supuesto, no me sale la información que pretendo lograr.

Pero esto no me funcia bien.

Gracias!
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

Mensaje anterior pero bien ordenado

Publicado por gerardo (5 intervenciones) el 04/08/2003 19:01:30
Lo probe pero todavia no me funcia.Pondre un ejemplo haber si me puede ayudar.
Estoy haciendo esta consulta sql, programando dentro de asp.

Tengo la siguientes tablas:

Productos Vendidos Tipos Productos
----------------------- ---------------
Codigo Producto Cantidad Codigo Producto Familia Marca Modelo
--------------- -------- --------------- ------- ----- ------
6 1 2 tv philips 3r
8 2 3 dvd sanyo dre3
2 3 6 dvd sharp zvc
2 2 8 cassette elbe vav
3 2

Dentro de la tabla de productos vendidos tengo dos campos, el codigo del producto y la cantidad.Este código
es el mismo que el codigo producto de la tabla de tipos de productos.
En la tabla de tipos de productos tengo el codigo producto, y despues la familia, marca y modelo al cual pertenece.
Entonces lo que pretendo es sacar el tipo de producto de cada familia que más se ha vendido.
El listado que saldria seria este:

Familia Marca Modelo
------- ----- -------
tv philips 3r
dvd sanyo dre3
cassette elbe vav

De los tv el que mas se ha vendido es el philips modelo 3r.El dvd que mas se ha vendido es el sanyo, que hemos vendido
2, el dvd sharp solamente hemos vendido 1, y como son de la misma familia, solo ha de aparecer el más vendido, que es
el dvd sanyo, por ultimo aparece el cassete elbe, ya que de la familia de cassetttes solo hay este.

Yo habia pensado en algo asi:
"SELECT Familia, Marca, Modelo, Sum(Cantidad) AS Total FROM TiposProductos,ProductosVendidos WHERE
TiposProductos.[Codigo Producto]=ProductosVendidos.[Codigo Producto] ORDER BY Familia"
Es una pequeña aproximacion, pero no precisamente esto.Si le pongo en el SELECT la SUM(Cantidad) me da error, me dice
que me falta la funcion de agregado de familia o algo asi, si solo le pondo Cantidad, me lo imprime por pantalla bien
aunque por supuesto, no me sale la información que pretendo lograr.

Pero esto no me funcia bien.

Gracias!
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

Este ultimo es el bueno

Publicado por gerardo (5 intervenciones) el 04/08/2003 19:10:07
Lo probe pero todavia no me funcia.Pondre un ejemplo haber si me puede ayudar.
Estoy haciendo esta consulta sql, programando dentro de asp.

Tengo la siguientes tablas:

Productos Vendidos
------------------
Codigo Producto Cantidad
--------------- --------
6 1
8 2
2 3
2 2
3 2

Tipos Productos
---------------
Codigo Producto Familia Marca Modelo
--------------- ------- ----- ------
2 tv philips 3r
3 dvd sanyo dre3
6 dvd sharp zvc
8 cassette elbe vav

Dentro de la tabla de productos vendidos tengo dos campos, el codigo del producto y la cantidad.Este código
es el mismo que el codigo producto de la tabla de tipos de productos.
En la tabla de tipos de productos tengo el codigo producto, y despues la familia, marca y modelo al cual pertenece.
Entonces lo que pretendo es sacar el tipo de producto de cada familia que más se ha vendido.
El listado que saldria seria este:

Familia Marca Modelo
------- ----- -------
tv philips 3r
dvd sanyo dre3
cassette elbe vav

De los tv el que mas se ha vendido es el philips modelo 3r.El dvd que mas se ha vendido es el sanyo, que hemos vendido
2, el dvd sharp solamente hemos vendido 1, y como son de la misma familia, solo ha de aparecer el más vendido, que es
el dvd sanyo, por ultimo aparece el cassete elbe, ya que de la familia de cassetttes solo hay este.

Yo habia pensado en algo asi:
"SELECT Familia, Marca, Modelo, Sum(Cantidad) AS Total FROM TiposProductos,ProductosVendidos WHERE
TiposProductos.[Codigo Producto]=ProductosVendidos.[Codigo Producto] ORDER BY Familia"
Es una pequeña aproximacion, pero no precisamente esto.Si le pongo en el SELECT la SUM(Cantidad) me da error, me dice
que me falta la funcion de agregado de familia o algo asi, si solo le pondo Cantidad, me lo imprime por pantalla bien
aunque por supuesto, no me sale la información que pretendo lograr.

Pero esto no me funcia bien.

Gracias!
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:Este ultimo es el bueno

Publicado por Isaías Islas (5072 intervenciones) el 04/08/2003 19:52:54
Cuando usted utiliza SUM o COUNT, debera agregar en el GROUP BY la cantidad de columnas que acompañan a su columna calculada, por tanto en su ejemplo debera agregar en el GROUP BY las columnas Familia, Marca, Modelo.

Ademas, se sugiere por parte de Microsoft, siempre utilizar en el caso de uniones entre tablas el INNER JOIN (LEFT, RIGHT), ya que al hacer uso del WHERE le resta performance a las consultas.
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:Casi lo tengo!

Publicado por gerardo (5 intervenciones) el 04/08/2003 20:52:48
Hola!
Finalmente me funciona esta consulta, que me saca de cada tipo de producto, la cantidad que se ha vendido.Lo unico que me queda es que
quiero que solo quiero que me salga el tipo de producto de cada familia
que más se ha vendido, y con esta consulta me salen todos los tipos
de productos, o sea que de una familia me salen varios tipos de productos.

Me gustaria saber como pudiera hacerlo, si con algun DISTINCT o con
algun TOP.Recuerdo la tabla tipo de producto tiene:
Codigo Producto, Marca, Familia, y Modelo,
y solamente quiero que de cada familia salga el tipo de producto mas
vendido.

\"SELECT TiposProductos.`Modelo`,TiposProductos.`Familia`,TiposProductos.`Marca`,SUM (ProductosVendidos.`Cantidad`) AS Total FROM `ProductosVendidos` ProductosVendidos INNER JOIN `TiposProductos` TiposProductos ON ProductosVendidos.`Codigo Producto` = TiposProductos.`CodigoTipoProducto` GROUP BY TiposProductos.`Familia`,TiposProductos.`Modelo`,TiposProductos.`Marca` ORDER BY TiposProductos.`Familia` ASC\"

Gracias!
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