--1. Liệt kê danh sách các orders ứng với tổng tiền của từng hóa đơn. Thông tin --bao gồm OrderID, OrderDate, Total. Trong đó Total là Sum của Quantity * --Unitprice, kết nhóm theo OrderID. SELECT o.OrderID,o.OrderDate, SUM(od.Quantity * od.UnitPrice) AS Total FROM Orders o JOIN [Order Details] od ON o.OrderID = od.OrderID GROUP BY o.OrderID,o.OrderDate; --2. Liệt kê danh sách các orders mà địa chỉ nhận hàng ở thành phố ‘Madrid’ --(Shipcity). Thông tin bao gồm OrderID, OrderDate, Total. Trong đó Total --là tổng trị giá hóa đơn, kết nhóm theo OrderID. SELECT o.OrderID,o.OrderDate,SUM(od.Quantity * od.UnitPrice) AS Total FROM Orders o JOIN [Order Details] od ON o.OrderID = od.OrderID WHERE o.ShipCity = 'Madrid' GROUP BY o.OrderID,o.OrderDate; --3. Viết các truy vấn để thống kê số lượng các hóa đơn : --- Trong mỗi năm. Thông tin hiển thị : Year , CoutOfOrders ? SELECT YEAR(OrderDate) AS Year,COUNT(OrderID) AS CountOfOrders FROM Orders GROUP BY YEAR(OrderDate) ORDER BY Year; --- Trong mỗi tháng/năm . Thông tin hiển thị : Year , Month, --CoutOfOrders ? SELECT YEAR(OrderDate) AS Year,MONTH(OrderDate) AS Month,COUNT(OrderID) AS CountOfOrders FROM Orders GROUP BY YEAR(OrderDate),MONTH(OrderDate) ORDER BY Year, Month; --- Trong mỗi tháng/năm và ứng với mỗi nhân viên. Thông tin hiển --thị : Year, Month, EmployeeID, CoutOfOrders ? SELECT YEAR(OrderDate) AS Year,MONTH(OrderDate) AS Month, EmployeeID,COUNT(OrderID) AS CountOfOrders FROM Orders GROUP BY YEAR(OrderDate),MONTH(OrderDate),EmployeeID ORDER BY Year, Month, EmployeeID; --4. Cho biết mỗi Employee đã lập bao nhiêu hóa đơn. Thông tin gồm --EmployeeID, EmployeeName, CountOfOrder. Trong đó CountOfOrder là --tổng số hóa đơn của từng employee. EmployeeName được ghép từ --LastName và FirstName. SELECT e.EmployeeID,e.LastName + ' ' + e.FirstName AS EmployeeName,COUNT(o.OrderID) AS CountOfOrder FROM Employees e LEFT JOIN Orders o ON e.EmployeeID = o.EmployeeID GROUP BY e.EmployeeID,e.LastName,e.FirstName ORDER BY CountOfOrder DESC; --5. Cho biết mỗi Employee đã lập được bao nhiêu hóa đơn, ứng với tổng tiền --các hóa đơn tương ứng. Thông tin gồm EmployeeID, EmployeeName, --CountOfOrder , Total. SELECT e.EmployeeID,e.LastName + ' ' + e.FirstName AS EmployeeName,COUNT(DISTINCT o.OrderID) AS CountOfOrder, SUM(od.Quantity * od.UnitPrice) AS Total FROM Employees e LEFT JOIN Orders o ON e.EmployeeID = o.EmployeeID LEFT JOIN [Order Details] od ON o.OrderID = od.OrderID GROUP BY e.EmployeeID,e.LastName,e.FirstName ORDER BY Total DESC; --6. Liệt kê bảng lương của mỗi Employee theo từng tháng trong năm 1996 --gồm EmployeeID, EmployName, Month_Salary, Salary = --sum(quantity*unitprice)*10%. Được sắp xếp theo Month_Salary, cùmg --Month_Salary thì sắp xếp theo Salary giảm dần. SELECT e.EmployeeID,e.LastName + ' ' + e.FirstName AS EmployName,MONTH(o.OrderDate) AS Month_Salary, SUM(od.Quantity * od.UnitPrice) * 0.1 AS Salary FROM Employees e JOIN Orders o ON e.EmployeeID = o.EmployeeID JOIN [Order Details] od ON o.OrderID = od.OrderID WHERE YEAR(o.OrderDate) = 1996 GROUP BY e.EmployeeID,e.LastName,e.FirstName,MONTH(o.OrderDate) ORDER BY Month_Salary,Salary DESC; --7. Tính tổng số hóa đơn và tổng tiền các hóa đơn của mỗi nhân viên đã bán --trong tháng 3/1997, có tổng tiền >4000. Thông tin gồm EmployeeID, --LastName, FirstName, CountofOrder, Total. SELECT e.EmployeeID,e.LastName,e.FirstName,COUNT(DISTINCT o.OrderID) AS CountOfOrder, SUM(od.Quantity * od.UnitPrice) AS Total FROM Employees e JOIN Orders o ON e.EmployeeID = o.EmployeeID JOIN [Order Details] od ON o.OrderID = od.OrderID WHERE YEAR(o.OrderDate) = 1997 AND MONTH(o.OrderDate) = 3 GROUP BY e.EmployeeID,e.LastName,e.FirstName HAVING SUM(od.Quantity * od.UnitPrice) > 4000 ORDER BY Total DESC; --8. Liệt kê danh sách các customer ứng với tổng số hoá đơn, tổng tiền các hoá --đơn, mà các hóa đơn được lập từ 31/12/1996 đến 1/1/1998 và tổng tiền các --hóa đơn >20000. Thông tin được sắp xếp theo CustomerID, cùng mã thì --sắp xếp theo tổng tiền giảm dần. SELECT CustomerID, CountOrders = COUNT(*), Total = SUM([UnitPrice]*[Quantity]) FROM [dbo].[Orders] O JOIN [dbo].[Order Details] OD ON O.OrderID = OD.OrderID WHERE [OrderDate] BETWEEN '1996/12/31' AND '1992/1/1' GROUP BY CustomerID HAVING SUM([UnitPrice]*[Quantity]) > 20000 ORDER BY CustomerID, SUM([UnitPrice]*[Quantity]) DESC --9. Liệt kê danh sách các customer ứng với tổng tiền của các hóa đơn ở từng --tháng. Thông tin bao gồm CustomerID, CompanyName, Month_Year, --Total. Trong đó Month_year là tháng và năm lập hóa đơn, Total là tổng của --Unitprice* Quantity. SELECT c.CustomerID,c.CompanyName,CONCAT(MONTH(o.OrderDate), '/', YEAR(o.OrderDate)) AS Month_Year, SUM(od.Quantity * od.UnitPrice) AS Total FROM Customers c JOIN Orders o ON c.CustomerID = o.CustomerID JOIN [Order Details] od ON o.OrderID = od.OrderID GROUP BY c.CustomerID,c.CompanyName,YEAR(o.OrderDate),MONTH(o.OrderDate) ORDER BY c.CustomerID,YEAR(o.OrderDate),MONTH(o.OrderDate); --10.Liệt kê danh sách các nhóm hàng (category) có tổng số lượng tồn --(UnitsInStock) lớn hơn 300, đơn giá trung bình nhỏ hơn 25. Thông tin bao --gồm CategoryID, CategoryName, Total_UnitsInStock, Average_Unitprice. SELECT c.CategoryID,c.CategoryName,SUM(p.UnitsInStock) AS Total_UnitsInStock, AVG(p.UnitPrice) AS Average_UnitPrice FROM Categories c JOIN Products p ON c.CategoryID = p.CategoryID GROUP BY c.CategoryID,c.CategoryName HAVING SUM(p.UnitsInStock) > 300 AND AVG(p.UnitPrice) < 25 ORDER BY Total_UnitsInStock DESC; --11.Liệt kê danh sách các nhóm hàng (category) có tổng số mặt hàng (product) --nhỏ hớn 10. Thông tin kết quả bao gồm CategoryID, CategoryName, --CountOfProducts. Được sắp xếp theo CategoryName, cùng CategoryName --thì sắp theo CountOfProducts giảm dần. SELECT c.CategoryID,c.CategoryName,COUNT(p.ProductID) AS CountOfProducts FROM Categories c JOIN Products p ON c.CategoryID = p.CategoryID GROUP BY c.CategoryID,c.CategoryName HAVING COUNT(p.ProductID) < 10 ORDER BY c.CategoryName,CountOfProducts DESC; --12.Liệt kê danh sách các Product bán trong quý 1 năm 1998 có tổng số lượng --bán ra >200, thông tin gồm [ProductID], [ProductName], SumofQuatity SELECT p.ProductID,p.ProductName,SUM(od.Quantity) AS SumOfQuantity FROM Products p JOIN [Order Details] od ON p.ProductID = od.ProductID JOIN Orders o ON od.OrderID = o.OrderID WHERE YEAR(o.OrderDate) = 1998AND MONTH(o.OrderDate) IN (1, 2, 3) GROUP BY p.ProductID,p.ProductName HAVING SUM(od.Quantity) > 200 ORDER BY SumOfQuantity DESC; --13.Cho biết Employee nào bán được nhiều tiền nhất trong tháng 7 năm 1997 SELECT TOP 1 e.EmployeeID,e.LastName + ' ' + e.FirstName AS EmployeeName, SUM(od.Quantity * od.UnitPrice) AS TotalSales FROM Employees e JOIN Orders o ON e.EmployeeID = o.EmployeeID JOIN [Order Details] od ON o.OrderID = od.OrderID WHERE YEAR(o.OrderDate) = 1997AND MONTH(o.OrderDate) = 7 GROUP BY e.EmployeeID,e.LastName,e.FirstName ORDER BY TotalSales DESC; --14.Liệt kê danh sách 3 Customer có nhiều đơn hàng nhất của năm 1996. SELECT TOP 3 c.CustomerID,c.CompanyName,COUNT(o.OrderID) AS CountOfOrders FROM Customers c JOIN Orders o ON c.CustomerID = o.CustomerID WHERE YEAR(o.OrderDate) = 1996 GROUP BY c.CustomerID,c.CompanyName ORDER BY CountOfOrders DESC; --15.Liệt kê danh sách các Products có tổng số lượng lập hóa đơn lớn nhất. --Thông tin gồm ProductID, ProductName, CountOfOrders. SELECT P.ProductID, ProductName, CountOfOrders = COUNT(*) FROM [dbo].[Order Details] OD JOIN [dbo].[Products] P ON OD.ProductID = P.ProductID GROUP BY P.ProductID, ProductName ORDER BY COUNT(*) DESC