Está en la página 1de 8

Consultas Avanzadas en Northwind

INTELIGENCIA DE NEGOCIOS
Sentencias SQL.

Escuela Profesional
Ingeniería de Sistemas
Alumnas Semestre
Vallejos Chacón, Milagros Beatriz 2014-1
Mariñas Mosquera Greisi Fiorella

1. Activar la BD Northwind

2. Consultas Realizadas
una.

use Northwind
select c.CategoryName as Categoria,
SUM(d.quantity*d.unitprice) as Monto
from Categories c
JOIN Products p on c.CategoryID=p.CategoryID
JOIN "Order Details" d on p.ProductID=d.ProductID

group by c.CategoryName;

b.

select YEAR(o.orderdate) as Año,


c.categoryName as Categoria,
SUM(d.quantity*d.unitprice) as Monto
from Categories c
JOIN Products p on c.CategoryID=p.CategoryID
JOIN "Order Details" d on p.ProductID=d.ProductID
JOIN Orders o on o.OrderID=d.OrderID
group by YEAR(o.OrderDate), c.categoryName

order by 2,1;

1. Consultas Avanzadas
Listado de montos por categoría de cada año “1996, 1997, 1998”

Se hace la consulta con el Pivot, entonces se necesita ejecutar

exec dbo.sp_dbcmptlevel @dbname=N'Northwind',@new_cmptlevel=90

Una vez ejecutado lo anterior la consulta sería

SELECT Categoria,[1996] AS '1996', [1997] AS '1997',[1998] AS '1998'


FROM
(
SELECT C.CategoryName AS [Categoria],YEAR(O.OrderDate) [Year],(D.UnitPric
e*D.Quantity) AS Monto
FROM Categories C
INNER JOIN Products P ON C.CategoryID=P.CategoryID
INNER JOIN [Order Details] D ON P.ProductID=D.ProductID
INNER JOIN Orders O ON O.OrderID=D.OrderID
)
PIV

PIVOT(SUM(Monto) FOR [YEAR] IN ([1996],[1997],[1998])) pvt


Total facturado por cada categoría junto con el detalle comparativo por año
Ejecutamos

exec dbo.sp_dbcmptlevel @dbname=N'Northwind',@new_cmptlevel=90

La consulta sería:

SELECT Categoria,[1996] AS '1996', [1997] AS '1997',[1998] AS'1998',pvt.[


1996]+pvt.[1997]+pvt.[1998] AS Total
FROM
(
SELECT C.CategoryName AS [Categoria],YEAR(O.OrderDate) [Year],(D.UnitPric
e*D.Quantity) AS Monto
FROM Categories C
INNER JOIN Products P ON C.CategoryID=P.CategoryID
INNER JOIN [Order Details] D ON P.ProductID=D.ProductID
INNER JOIN Orders O ON O.OrderID=D.OrderID
)
PIV
PIVOT(SUM(Monto) FOR [YEAR] IN ([1996],[1997],[1998])) pvt

Opciones en un Listado con Select


Las opciones de un listado con la instrucción select permiten modificar el
conjunto de resultados, las opciones son cláusulas adicionales que nos
permiten reducir la cantidad de registros en el listado, mostrar registros únicos,
obligar al optimizar a usar un índice, combinar dos instrucciones, entre otras
opciones.

Las opciones son:


Opción Explicación

Top Limita las filas del conjunto de resultados. Se puede usar con un valor n
porcentaje.

With Ties Permite mostrar registros que hayan sido limitados usando la opción To
igual al último registro que aparece.

Distinct Permite mostrar valores sin duplicados en una consulta.

With (index…) Obliga al optimizador a usar un índice específico.

Union Permite unir diferentes consultas en un solo conjunto de resultados.

Into Tabla Permite crear una tabla con el conjunto de resultados.

Offset y Fetch Next Permiten listar un grupo de resultados que aparecen ordenados pero sin

Ejercicios
Usando Northwind
use Northwind
go

1. — Listar los productos ordenados por precio, mostrar los 10 mas


caros.

select Top 10 P.ProductID, P.ProductName, P.UnitPrice, P.UnitsInStock


from Products As P order by P.UnitPrice desc
go

2. — Listar las órdenes con mas monto, mostrar el 20% de estas.

select Top 20 percent O.OrderID, O.OrderDate, O.Freight


from Orders As O order by O.Freight desc
go
3. — Listar los 5 empleados que generaron más órdenes, incluir los que
tengan la misma cantidad del quinto.(Ver agrupamientos)

Select Top 5 with ties


E.EmployeeID As ‘Cód. Empleado’, Empleado = E.LastName + Space(1) +
E.FirstName,
COUNT(O.OrderID) As ‘Cantidad de Órdenes’
from Orders As O
join Employees As E on O.EmployeeID = E.EmployeeID
Group by E.EmployeeID, E.LastName + Space(1) + E.FirstName
Order by COUNT(O.OrderID) desc
go

Obligar al optimizador a usar un índice.


4. — Listar los productos usando el indice ProductName cuyo campo de
indexación es el campo ProductNam. Esta cláusula es similar a usar un
Order By.

select * from Products with (index(ProductName))


go

— Usando AdventureWorks
USE AdventureWorks
go

5. – Listar los empleados ordenados por el Nº ID. (Índice


AK_Employee_NationalIDNumber) (Ver Índices)

select P.FirstName As ‘Apellidos’, P.LastName As ‘Nombre’,


E.NationalIDNumber As ‘Nº ID’
FROM HumanResources.Employee AS E WITH
(INDEX(AK_Employee_NationalIDNumber))
JOIN Person.Contact AS P on E.ContactID = P.ContactID
WHERE LastName = ‘Johnson’
go

6. — Usando el índice 0 (la clave primaria – índice agrupado)

select P.FirstName As ‘Apellidos’, P.LastName As ‘Nombre’,


E.NationalIDNumber As ‘Nº ID’
FROM HumanResources.Employee AS E WITH (0)
JOIN Person.Contact AS P on E.ContactID = P.ContactID
WHERE LastName = ‘Johnson’
go
Uso de Distinct
7. Usando Northwind, listado de los clientes que compraron en el primer
mes de 1998

use Northwind
go
select C.CustomerID As ‘Código’, C.CompanyName As ‘Cliente’
from Customers As C
join Orders As O on C.CustomerID = O.CustomerID
where Month(O.OrderDate) = 1 and YEAR(O.OrderDate) = 1998
Order by Cliente
go
— Note que hay Clientes que se repiten.

Usando Distinct los clientes que se repiten no aparecen

select Distinct C.CustomerID As ‘Código’, C.CompanyName As ‘Cliente’


from Customers As C
join Orders As O on C.CustomerID = O.CustomerID
where Month(O.OrderDate) = 1 and YEAR(O.OrderDate) = 1998
Order by Cliente
go
Uso de Union simple
8.– Listado de los productos de las categorías 3 y 5 unida con los
productos de las categorías 2,6 y 8

select * from Products where CategoryID in (3,5)


union
select * from Products where CategoryID in (2,6,8)
go

Uso de Offset y Fetch Next


use Northwind
go

Se pueden usar estas opciones desde SQL Server 2012


9.–Listar los 10 registros mas caros exceptuando los 5 primeros.

select ProductName, UnitPrice


from Products order by UnitPrice desc
offset 5 rows fetch next 10 rows only
go
Creando tablas resultado de un select –
Into Tabla
10. — Crear una tabla ProductosCategoriaBebidas (Id = 1)

select P.ProductID, P.ProductName, P.UnitPrice, P.QuantityPerUnit,


P.UnitsInStock, P.UnitsOnOrder
into ProductosCategoriaBebidas
from Products As P where CategoryID = 1
go
— Para visualizar los registros de la tabla generada.
select * from ProductosCategoriaBebidas
go
— Importante: La tabla creada con Into se crea sin restricciones.

También podría gustarte