
Problema con vistas y consultas
Publicado por Arturo (1 intervención) el 21/06/2015 01:40:47
Buenas tardes.
Tengo un problema que no logro solucionar por mi cuenta.
La cuestión es así:
Tal vez crean que no viene al caso, pero quiero explicar el porque recurro a pedir ayuda aquí.
Mi profesor en la universidad que me "da" clase de BD, está incapacitado, y nos está pidiendo que convirtamos, todos los ejercicios que hicimos en Subconsultas (subquery), en Vistas (view). No tengo a quien pedir ayuda, a decir verdad.
Tengo dos problemas, el primero
Creo la vlsta, donde quiero, nombre, apellido (autor), id libro y nombre libro , cantidad (ventas), precio y ganancia
(La BD es una genérica, es Pubs), Ya creo, y todo bien hasta ahí
lo que pasa es que, al querer sacar el libro con más ventas, me saca la cantidad correcta que es del que más a vendido, y hasta el título,pero si hago para el mínimo, me muestra la cantidad, pero el nombre del pasado (máximo).
select titulo, nombre_libro, precio, cantidad, ganancia from Ganancia_Autor;
/*El libro con mayor ganancia*/
select titulo, nombre_libro, precio, cantidad, max(ganancia) from Ganancia_Autor;
/*El libro con menor ganancia*/
select titulo, nombre_libro, precio, cantidad, min(ganancia) from Ganancia_Autor;
La segunda, en una vista no puedo poner una subconsulta, y la necesito
Para, que me muestre bien cosas, ejemplo:
use adventureworks;
select ID, Nombre, Ganancia, anio
from (
select prod.ProductID ID, prod.Name as Nombre, sum((UnitPrice-UnitPrice*UnitPriceDiscount)*OrderQTY) Ganancia,
year(detalles.ModifiedDate) anio from product prod
join salesorderdetail detalles on detalles.ProductID = prod.ProductID
group by prod.Name, anio) abc
where Nombre = (
select nombreprod
from (
select prod.ProductID ID, prod.Name as nombreprod, sum((UnitPrice-UnitPrice*UnitPriceDiscount)*OrderQTY) Ganancia,
year(detalles.ModifiedDate) anio from product prod
join salesorderdetail detalles on detalles.ProductID = prod.ProductID
group by prod.Name) abcd
where Ganancia = (
select Max(bcd.Ganancia) as MasVendido
from (
select prod.ProductID ID, Name as Nombre, sum((UnitPrice-UnitPrice*UnitPriceDiscount)*OrderQTY) Ganancia
from product prod
join salesorderdetail detalles on detalles.ProductID = prod.ProductID
group by prod.Name ) bcd
)
);
Si no pongo el Where nombre = nombreprod
y el where ganancia = masvendido, no me muestra la información que necesito.
Agradecería mucho su ayuda.
Tengo un problema que no logro solucionar por mi cuenta.
La cuestión es así:
Tal vez crean que no viene al caso, pero quiero explicar el porque recurro a pedir ayuda aquí.
Mi profesor en la universidad que me "da" clase de BD, está incapacitado, y nos está pidiendo que convirtamos, todos los ejercicios que hicimos en Subconsultas (subquery), en Vistas (view). No tengo a quien pedir ayuda, a decir verdad.
Tengo dos problemas, el primero
Creo la vlsta, donde quiero, nombre, apellido (autor), id libro y nombre libro , cantidad (ventas), precio y ganancia
(La BD es una genérica, es Pubs), Ya creo, y todo bien hasta ahí
lo que pasa es que, al querer sacar el libro con más ventas, me saca la cantidad correcta que es del que más a vendido, y hasta el título,pero si hago para el mínimo, me muestra la cantidad, pero el nombre del pasado (máximo).
select titulo, nombre_libro, precio, cantidad, ganancia from Ganancia_Autor;
/*El libro con mayor ganancia*/
select titulo, nombre_libro, precio, cantidad, max(ganancia) from Ganancia_Autor;
/*El libro con menor ganancia*/
select titulo, nombre_libro, precio, cantidad, min(ganancia) from Ganancia_Autor;
La segunda, en una vista no puedo poner una subconsulta, y la necesito
Para, que me muestre bien cosas, ejemplo:
use adventureworks;
select ID, Nombre, Ganancia, anio
from (
select prod.ProductID ID, prod.Name as Nombre, sum((UnitPrice-UnitPrice*UnitPriceDiscount)*OrderQTY) Ganancia,
year(detalles.ModifiedDate) anio from product prod
join salesorderdetail detalles on detalles.ProductID = prod.ProductID
group by prod.Name, anio) abc
where Nombre = (
select nombreprod
from (
select prod.ProductID ID, prod.Name as nombreprod, sum((UnitPrice-UnitPrice*UnitPriceDiscount)*OrderQTY) Ganancia,
year(detalles.ModifiedDate) anio from product prod
join salesorderdetail detalles on detalles.ProductID = prod.ProductID
group by prod.Name) abcd
where Ganancia = (
select Max(bcd.Ganancia) as MasVendido
from (
select prod.ProductID ID, Name as Nombre, sum((UnitPrice-UnitPrice*UnitPriceDiscount)*OrderQTY) Ganancia
from product prod
join salesorderdetail detalles on detalles.ProductID = prod.ProductID
group by prod.Name ) bcd
)
);
Si no pongo el Where nombre = nombreprod
y el where ganancia = masvendido, no me muestra la información que necesito.
Agradecería mucho su ayuda.
Valora esta pregunta


0