Chapter 13) Built-in scalar functions SELECT TRY_CAST('PATRICK' AS INT) TryCast, TRY_CONVERT(DATETIME, '13/2/2999', 112) AS TryConvert, PARSE('Saturday, 26 May 2012' AS DATETIME USING 'en-US') AS Parse, TRY_PARSE('Patricks BirthDay' AS DATETIME USING 'en-US') AS TryParse SELECT 'LEBLANC '+', '+' PATRICK' RawValues, RTRIM('LEBLANC ')+', '+LTRIM(' PATRICK') TrimValue, LEFT('PatrickDTomorr', 7) [Left], RIGHT('DTomorrLeBlanc', 7) [Right], SUBSTRING('DTomorrPatrick',8,LEN('DTomorrPatrick')) [SubString], '12/'+CAST(1 AS VARCHAR)+'/2012' WithoutConcat, CONCAT('12/',1,'/2012') WithConcat declare @choosevar int = 3 SELECT CHOOSE(@choosevar, 'ONE', 'TWO', 'PATRICK', 'THREE') [Choose], IIF(DATENAME(MONTH, GETDATE()) = 'July', 'The 4th is this month', 'No Fireworks') AS [IIF] CHAPTER 14) Advanced T-SQL topics USE AdventureWorks2012; SELECT SUM(poh.TotalDue) AS TotalDue FROM Purchasing.PurchaseOrderHeader poh USE AdventureWorks2012; SELECT SUM(poh.TotalDue) AS [Total Due], AVG(poh.TotalDue) AS [Average Total Due], COUNT(poh.EmployeeID) [Number Of Employees], COUNT(DISTINCT poh.EmployeeID) [Distinct Number Of Employees] FROM Purchasing.PurchaseOrderHeader poh USE AdventureWorks2012; SELECT SUM(poh.TotalDue) AS [Total Due], AVG(poh.TotalDue) AS [Average Total Due], COUNT(poh.EmployeeID) [Number Of Employees], COUNT(DISTINCT poh.EmployeeID) [Distinct Number Of Employees], COUNT(*) [ROWS OR NUM OF ORDERS], COUNT(*)/COUNT(DISTINCT poh.EmployeeID) [AVG ORDERS PER EMP], SUM(poh.TotalDue)/COUNT(DISTINCT poh.EmployeeID) [AVG TOT DUE PER EMP] FROM Purchasing.PurchaseOrderHeader poh USE AdventureWorks2012; SELECT sm.Name AS ShippingMethod SUM(poh.TotalDue) AS [Total Due], AVG(poh.TotalDue) AS [Average Total Due], COUNT(poh.EmployeeID) [Number Of Employees], COUNT(DISTINCT poh.EmployeeID) [Distinct Number Of Employees] FROM Purchasing.PurchaseOrderHeader poh INNER JOIN Purchasing.ShipMethod sm ON poh.ShipMethodID = sm.ShipMethodID GROUP BY sm.Name USE AdventureWorks2012; SELECT sm.Name AS ShippingMethod, YEAR(poh.OrderDate) AS OrderYear, SUM(poh.TotalDue) AS [Total Due], AVG(poh.TotalDue) AS [Average Total Due], COUNT(poh.EmployeeID) AS [Number Of Employees], COUNT(DISTINCT poh.EmployeeID) AS [Distinct Number Of Employees] FROM Purchasing.PurchaseOrderHeader poh INNER JOIN Purchasing.ShipMethod sm ON poh.ShipMethodID = sm.ShipMethodID GROUP BY sm.Name, YEAR(poh.OrderDate) USE AdventureWorks2012; SELECT sm.Name AS ShippingMethod, YEAR(poh.OrderDate) AS OrderYear, SUM(poh.TotalDue) AS [Total Due], AVG(poh.TotalDue) AS [Average Total Due], COUNT(poh.EmployeeID) AS [Number Of Employees], COUNT(DISTINCT poh.EmployeeID) AS [Distinct Number Of Employees] FROM Purchasing.PurchaseOrderHeader poh INNER JOIN Purchasing.ShipMethod sm ON poh.ShipMethodID = sm.ShipMethodID GROUP BY sm.Name, YEAR(poh.OrderDate) HAVING SUM(poh.TotalDue) > 5000000 USE AdventureWorks2012 GO ;WITH ProductQty AS ( SELECT TOP(10) p.ProductID, SUM(OrderQty) AS OrderQty FROM Sales.SalesOrderDetail AS sod INNER JOIN Production.Product AS p ON sod.ProductID = p.ProductID GROUP BY p.ProductID ) SELECT p.NAME AS ProductName, pq.OrderQty, ROW_NUMBER() OVER(ORDER BY pq.OrderQty DESC) ROWNUMBER, RANK() OVER(ORDER BY pq.OrderQty DESC) [RANK], DENSE_RANK() OVER(ORDER BY pq.OrderQty DESC) [DENSERANK] FROM ProductQty AS pq INNER JOIN Production.Product AS p ON pq.ProductID = p.ProductID SELECT poh.EmployeeID, CONVERT(varchar(20), SUM(poh.TotalDue),1) FROM Purchasing.PurchaseOrderHeader poh GROUP BY poh.EmployeeID USE AdventureWorks2012; WITH EmployeePOs (EmployeeID, [Total Due]) AS ( SELECT poh.EmployeeID, CONVERT(varchar(20), SUM(poh.TotalDue),1) FROM Purchasing.PurchaseOrderHeader poh GROUP BY poh.EmployeeID ) SELECT * FROM EmployeePOs USE AdventureWorks2012; WITH EmployeePOs (EmployeeID, [Total Due]) AS ( SELECT poh.EmployeeID, CONVERT(varchar(20), SUM(poh.TotalDue),1) FROM Purchasing.PurchaseOrderHeader poh GROUP BY poh.EmployeeID ) SELECT ep.EmployeeID, p.FirstName, p.LastName, ep.[Total Due] FROM EmployeePOs ep INNER JOIN Person.Person p ON ep.EmployeeID = p.BusinessEntityID USE AdventureWorks2012; DECLARE @EmployeePOs AS TABLE ( EmployeeID int, TotalDue money ) INSERT INTO @EmployeePOs SELECT poh.EmployeeID, CONVERT(varchar(20), SUM(poh.TotalDue),1) FROM Purchasing.PurchaseOrderHeader poh GROUP BY poh.EmployeeID USE AdventureWorks2012; DECLARE @EmployeePOs AS TABLE ( EmployeeID int, TotalDue money ) INSERT INTO @EmployeePOs SELECT poh.EmployeeID, CONVERT(varchar(20), SUM(poh.TotalDue),1) FROM Purchasing.PurchaseOrderHeader poh GROUP BY poh.EmployeeID SELECT ep.EmployeeID, p.FirstName, p.LastName, ep.[TotalDue] FROM @EmployeePOs ep INNER JOIN Person.Person p ON ep.EmployeeID = p.BusinessEntityID USE AdventureWorks2012; CREATE TABLE #EmployeePOs ( EmployeeID int, TotalDue money ) INSERT INTO #EmployeePOs SELECT poh.EmployeeID, CONVERT(varchar(20), SUM(poh.TotalDue),1) FROM Purchasing.PurchaseOrderHeader poh GROUP BY poh.EmployeeID USE AdventureWorks2012; CREATE TABLE #EmployeePOs ( EmployeeID int, TotalDue money ) INSERT INTO #EmployeePOs SELECT poh.EmployeeID, CONVERT(varchar(20), SUM(poh.TotalDue),1) FROM Purchasing.PurchaseOrderHeader poh GROUP BY poh.EmployeeID USE AdventureWorks2012; CREATE TABLE #EmployeePOs ( EmployeeID int, TotalDue money ) INSERT INTO #EmployeePOs SELECT poh.EmployeeID, CONVERT(varchar(20), SUM(poh.TotalDue),1) FROM Purchasing.PurchaseOrderHeader poh GROUP BY poh.EmployeeID SELECT ep.EmployeeID, p.FirstName, p.LastName, ep.[TotalDue] FROM #EmployeePOs ep INNER JOIN Person.Person p ON ep.EmployeeID = p.BusinessEntityID USE AdventureWorks2012; BEGIN DECLARE @StartingHireDate datetime = '12/31/2001' SELECT e.BusinessEntityID, p.FirstName, p.LastName, e.HireDate FROM HumanResources.Employee e INNER JOIN Person.Person p ON e.BusinessEntityID = p.BusinessEntityID WHERE HireDate <= @StartingHireDate END IF(DATENAME(M, GETDATE())='December') BEGIN SELECT 'Time for the holidays!!!!' Results END ELSE BEGIN SELECT 'Not sure what''s going on now :(' Results END DECLARE @count int = 0 WHILE (@count < 10) BEGIN SET @count = @count + 1; IF(@count < 5) BEGIN SELECT @count AS Counter CONTINUE; END ELSE BREAK; END