Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- IF OBJECT_ID ( 'dbo.GetEmployeeByStat', 'P' ) IS NOT NULL
- DROP PROCEDURE dbo.GetEmployeeByStat
- GO
- IF OBJECT_ID ( 'tempdb..##EmployeeRankings') IS NOT NULL
- DROP TABLE ##EmployeeRankings
- GO
- CREATE PROCEDURE dbo.GetEmployeeByStat (@Kind VARCHAR(5), @Stat VARCHAR(20))
- AS
- BEGIN
- DECLARE @StatColumn VARCHAR(20)
- IF @Stat = 'Orders' SET @StatColumn = 'OrdersAmt' ELSE
- IF @Stat = 'Profit' SET @StatColumn = 'OrdersPrice' ELSE RAISERROR('Unknown stat', 0, 0)
- IF @Kind != 'Best' AND @Kind != 'Worst' RAISERROR('Unknown kind of order', 0, 0)
- DECLARE @EmployeesNamesAndIDs TABLE (FullName VARCHAR(20), ID INT)
- INSERT INTO @EmployeesNamesAndIDs (FullName, ID)
- (
- SELECT Employees.LastName + ' ' + Employees.FirstName, Employees.EmployeeID
- FROM Employees
- )
- DECLARE @EmployeesOrders TABLE (ID INT, Amt INT)
- INSERT INTO @EmployeesOrders (ID, Amt)
- (
- SELECT Employees.EmployeeID, COUNT(Orders.OrderID)
- FROM Employees, Orders
- WHERE Orders.EmployeeID = Employees.EmployeeID
- GROUP BY Employees.EmployeeID
- )
- DECLARE @OrdersPrices TABLE (ID INT, EID INT, Price INT)
- INSERT INTO @OrdersPrices (ID, EID, Price)
- (
- SELECT Orders.OrderID, Orders.EmployeeID, SUM([Order Details].UnitPrice*(1-[Order Details].Discount)*[Order Details].Quantity)
- FROM Orders, [Order Details]
- WHERE [Order Details].OrderID = Orders.OrderID
- GROUP BY Orders.OrderID, Orders.EmployeeID
- )
- DECLARE @EmployeesProfit TABLE (EID INT, FullProfit INT)
- INSERT INTO @EmployeesProfit (EID, FullProfit)
- (
- SELECT OP.EID, SUM(OP.Price)
- FROM Employees, @OrdersPrices as OP
- WHERE OP.EID = Employees.EmployeeID
- GROUP BY OP.EID
- )
- CREATE TABLE ##EmployeeRankings (FullName VARCHAR(40), OrdersAmt INT, OrdersPrice INT)
- INSERT INTO ##EmployeeRankings (FullName, OrdersPrice, OrdersAmt)
- (
- SELECT ENamesAndIDs.FullName, EP.FullProfit, EO.Amt
- FROM @EmployeesNamesAndIDs as ENamesAndIDs, @EmployeesProfit as EP, @EmployeesOrders as EO
- WHERE ENamesAndIDs.ID = EP.EID AND ENamesAndIDs.ID = EO.ID
- )
- DECLARE @Data INT
- DECLARE @TemporaryResult TABLE (Result INT)
- DECLARE @Query NVARCHAR(200)
- IF @Kind = 'Best' BEGIN
- SET @Query = 'SELECT MAX(ER.' + @StatColumn + ') FROM ##EmployeeRankings AS ER'
- INSERT INTO @TemporaryResult (Result) EXEC sp_executesql @Query
- SET @Data = (SELECT * FROM @TemporaryResult)
- END
- IF @Kind = 'Worst' BEGIN
- SET @Query = 'SELECT MIN(ER.' + @StatColumn + ') FROM ##EmployeeRankings AS ER'
- INSERT INTO @TemporaryResult (Result) EXEC sp_executesql @Query
- SET @Data = (SELECT * FROM @TemporaryResult)
- END
- DECLARE @StatString VARCHAR(40)
- SET @StatString =
- CASE @Kind
- WHEN 'Best' THEN 'Best by '
- WHEN 'Worst' THEN 'Worst by '
- END
- SET @StatString = @StatString +
- CASE @Stat
- WHEN 'Orders' THEN 'orders'
- WHEN 'Profit' THEN 'profit'
- END
- SET @Query = 'SELECT ''' + @StatString + ''', ER.FullName, ER.' + @StatColumn + ' FROM ##EmployeeRankings AS ER WHERE ER.' + @StatColumn + ' = ' + CONVERT(VARCHAR(100), @Data)
- EXEC sp_executesql @Query
- END
- GO
- EXEC dbo.GetEmployeeByStat 'Best', 'Profit'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement