PRACTICA 7.
EL DISEÑADOR DE CONSULTAS DE SQL SERVER 2000
LEE LOS TEMAS 11, 12, 13, 14, 15 y 16 DE TU LIBRO DE TEXTO, REALIZA LAS
PRÁCTICAS QUE EN ÉL SE ESPECIFICAN Y POSTERIORMENTE REALIZA ESTAS
OTRAS PARA AMPLIAR TUS CONOCIMIENTOS:
Utilizando el administrador corporativo, importa todas las tablas de la base de datos
[Link] en una nueva base de datos NEPTUNO_PR_7
Establece las relaciones de las tablas de [Link] en las tablas de
NEPTUNO_PR_7
Realiza las siguientes consultas en NEPTUNO_PR_7. Guárdalas como vistas con el
nombre C1, C2 ... C7
C1: Debe mostrar NombreCompañía, Año, Mes, ImportePedidos de todos los clientes.
Los importes de los pedidos se sumarán para cada cliente, año y mes y se calculará
teniendo en cuenta el descuento aplicado en cada linea de detalles de pedido.
SELECT [Link]ñía, YEAR([Link]) AS Año,
MONTH([Link]) AS Mes,
SUM((dbo.[Detalles de pedidos].PrecioUnidad * dbo.[Detalles de
pedidos].Cantidad) * (1 - dbo.[Detalles de pedidos].Descuento))
AS ImportePedidos
FROM [Link] INNER JOIN
[Link] ON [Link] = [Link] INNER JOIN
dbo.[Detalles de pedidos] ON [Link] = dbo.[Detalles de
pedidos].IdPedido
GROUP BY [Link]ñía, YEAR([Link]),
MONTH([Link]), [Link]
C2: Debe mostrar NombreCompañía, Año, Mes, ImportePedidos de todos los clientes.
Los importes de los pedidos se sumarán para cada cliente, año y mes y se calculará
teniendo en cuenta el descuento aplicado en cada linea de detalles de pedido. Sólo se
mostrará un intervalo de años (desde a1 hasta a2) que se definirán como parámetros de
la consulta.
SELECT [Link]ñía, YEAR([Link]) AS Año,
MONTH([Link]) AS Mes,
SUM((dbo.[Detalles de pedidos].PrecioUnidad * dbo.[Detalles de
pedidos].Cantidad) * (1 - dbo.[Detalles de pedidos].Descuento))
AS ImportePedidos
FROM [Link] INNER JOIN
[Link] ON [Link] = [Link] INNER JOIN
dbo.[Detalles de pedidos] ON [Link] = dbo.[Detalles de
pedidos].IdPedido
GROUP BY [Link]ñía, YEAR([Link]),
MONTH([Link]), [Link]
No se pueden poner parámetros a no ser que generemos un procedimiento almacenado y
ahí copiáramos este código.
C3: Debe mostrar NombreCompañía , PromedioTantoPorCientoDto de todos los clientes.
PromedioTantoPorCientoDto será el promedio de todos los porcentajes de descuento
aplicados al cliente en todos los pedidos realizados. Deberán aparecer primero los
clientes con mayor PromedioTantoPorCientoDto
SELECT TOP 100 PERCENT [Link], AVG(dbo.[Detalles de
pedidos].Descuento) AS PromedioTantoPorCientoDto
FROM [Link] INNER JOIN
[Link] ON [Link] = [Link] INNER JOIN
dbo.[Detalles de pedidos] ON [Link] = dbo.[Detalles de
pedidos].IdPedido
GROUP BY [Link]
ORDER BY AVG(dbo.[Detalles de pedidos].Descuento) DESC
C4: Debe mostrar NombreCompañía , Año, Mes, ImportePedidos de todos los clientes.
Los importes de los pedidos se sumarán para cada cliente, año y mes y se calculará
teniendo en cuenta el descuento aplicado en cada linea de detalles de pedido. Sólo
deben aparecer los meses cuyos números tengamos en una tabla llamada MESES que
deberéis crear antes de ejecutar esta consulta.
SELECT [Link]ñía, YEAR([Link]) AS Año,
MONTH([Link]) AS Mes,
SUM((dbo.[Detalles de pedidos].PrecioUnidad * dbo.[Detalles de
pedidos].Cantidad) * (1 - dbo.[Detalles de pedidos].Descuento))
AS ImportePedidos
FROM [Link] INNER JOIN
[Link] ON [Link] = [Link] INNER JOIN
dbo.[Detalles de pedidos] ON [Link] = dbo.[Detalles de
pedidos].IdPedido
GROUP BY [Link]ñía, MONTH([Link]),
YEAR([Link]), [Link]
HAVING (MONTH([Link]) IN
(SELECT IdMes
FROM Meses))
C5: Debe mostrar IdProducto, NombreProducto, Nº de Pedidos, ImporteSinDto,
ImporteDto de todos los productos pedidos el año 1996 más de tres veces, ordenados
por Nº de pedidos de mayor a menor.
SELECT [Link], [Link], COUNT(dbo.[Detalles
de pedidos].IdPedido) AS NºPedido,
([Link] * dbo.[Detalles de pedidos].Cantidad) * (1 - dbo.
[Detalles de pedidos].Descuento) AS ImporteDescuento,
[Link] * dbo.[Detalles de pedidos].Cantidad AS
ImporteSinDescuento, YEAR([Link]) AS Año
FROM [Link] INNER JOIN
dbo.[Detalles de pedidos] ON [Link] = dbo.[Detalles de
pedidos].IdProducto INNER JOIN
[Link] ON dbo.[Detalles de pedidos].IdPedido = [Link]
GROUP BY [Link], [Link],
([Link] * dbo.[Detalles de pedidos].Cantidad)
* (1 - dbo.[Detalles de pedidos].Descuento), [Link] * dbo.
[Detalles de pedidos].Cantidad, YEAR([Link])
HAVING (YEAR([Link]) = 1996)
Realiza las siguientes operaciones en NEPTUNO_PR_7.
C6: Crea una tabla llamada RESUMEN_PEDIDOS_CLIENTES_96 con el IdCliente,
NombreCompañía , Año, ImportePedidos correspondientes al importe total de todos los
pedidos de cada cliente correspondientes a 1996. En el cálculo del importe de los
pedidos se tendrá en cuenta el descuento.
SELECT [Link], [Link]ñía, YEAR([Link]) AS
Año,
SUM(([Detalles de pedidos].PrecioUnidad * [Detalles de pedidos].Cantidad) * (1 -
[Detalles de pedidos].Descuento)) AS ImporteTotal
INTO RESUMEN_PEDIDOS_CLIENTES_96
FROM Clientes INNER JOIN
Pedidos ON [Link] = [Link] INNER JOIN
[Detalles de pedidos] ON [Link] = [Detalles de pedidos].IdPedido
GROUP BY [Link], [Link]ñía, YEAR([Link])
HAVING (YEAR([Link]) = 1996)
C7: Crea una tabla llamada RESUMEN_PEDIDOS_AÑO_96 con el Año, ImportePedidos,
ImportePedidosConDescuento correspondientes al importe total de todos los pedidos
del año 1996.
SELECT YEAR([Link]) AS Año, SUM([Detalles de pedidos].PrecioUnidad *
[Detalles de pedidos].Cantidad) AS ImportePedidos,
SUM(([Detalles de pedidos].PrecioUnidad * [Detalles de pedidos].Cantidad) * (1 -
[Detalles de pedidos].Descuento))
AS ImportePedidosConDescuento
INTO RESUMEN_PEDIDOS_AÑO_96
FROM Clientes INNER JOIN
Pedidos ON [Link] = [Link] INNER JOIN
[Detalles de pedidos] ON [Link] = [Detalles de pedidos].IdPedido
GROUP BY YEAR([Link])
HAVING (YEAR([Link]) = 1996)
C8: Crea una tabla llamada CLIENTES_Y_PROVEEDORES con los Códigos y Nombres de
todos los clientes y proveedores
SELECT IdCliente, [Link] UNION SELECT CONVERT(char,IdProveedor),
[Link]
INTO CLIENTES_Y_PROVEEDORES
FROM Clientes, Proveedores