IF EXISTS (SELECT * FROM sys.objects WHERE name= 'OrdersInYear' AND type='IF') DROP FUNCTION [dbo].[OrdersInYear] GO CREATE FUNCTION OrdersInYear ( @cYear INT = 2020 ) RETURNS TABLE AS RETURN SELECT o.orderid, o.custid, o.orderdate, COUNT(*) AS poscount, SUM(od.qty * od.unitprice) AS value FROM Sales.Orders o INNER JOIN Sales.OrderDetails od ON od.orderid = o.orderid WHERE YEAR(o.orderdate) = ISNULL(@cYear, 0) GROUP BY o.orderid, o.custid, o.orderdate ; GO select * from dbo.OrdersInYear(2007) o inner join Sales.Customers sc ON o.custid = sc.custid WHERE sc.companyname LIKE '%MLT%' IF EXISTS (SELECT * FROM sys.objects WHERE name= 'CustomerData' AND type='FN') DROP FUNCTION [dbo].[CustomerData] GO CREATE FUNCTION [dbo].[CustomerData] ( @cCustomerid INT = 0 ) RETURNS NVARCHAR(300) --WITH ENCRYPTION AS BEGIN DECLARE @cResult NVARCHAR(300) = '' IF EXISTS (SELECT * FROM Sales.Customers WHERE custid = @cCustomerid) BEGIN SELECT @cResult = CONCAT('Company: ', TRIM(ISNULL(companyname,'')), ', Address: ', TRIM(ISNULL(address,''))) FROM Sales.Customers WHERE custid = @cCustomerid END RETURN @cResult END GO select dbo.CustomerData(o.custid), o.poscount, o.value from dbo.OrdersInYear(2007) o inner join Sales.Customers sc ON o.custid = sc.custid WHERE --sc.companyname LIKE '%MLT%' AND dbo.CustomerData(o.custid) LIKE '%Obere%' /* 1. Napisać funkcję ordersInRange(@datefrom, @dateto), która zwróci informację o zamówieniach klientów w określonym zakresie dat 2. Wykorzystująć funkcję z punktu 1 ustalić maksymalną wartość łączną miesięcznych zamówień dla każdego z klientów w latach 2006 i 2007 3. Napisać funkcję, która dla danego zamówienia (orderid) zwraca informację o łącznej liczbie dni (typ INT), która upłynęła od zamówienia (orderdate) do dostawy (shipperdate) 4. Wykorzystując funkcję z punktu 3 znaleźć średni czas realizacji zamówienia dla wszystkich dostawców. */