Fonksiyonlar

--her çalışananın adını soyadını ve aldığı toplam sipariş saısını listeleyin

select e.FirstName +' '+ e.LastName as Calisan,
COUNT(OrderID) as SiparisSayisi
from Employees e
join Orders o on o.EmployeeID=e.EmployeeID
group by e.FirstName +' '+ e.LastName

--başka yol
select FirstName, LastName,
(
	select COUNT(orderID) from Orders
	where EmployeeID=e.EmployeeID
)
from Employees e

------------------FONKSİYONLAR-------------------------
--1) SCALAR FUNCTION(TEK DEĞER DÖNDÜREN FONKSİYONLAR)
create function udf_SiparisSayisi
(
	@EmpID int 
)
returns int
as
begin
	declare @toplam int
	select @toplam=count(orderID) from orders
	where employeeID=@empID
	return(@toplam)
end

--sistem fonksiyonu olmadığı için bizim fonksiyonu yazarken şemasını(dbo) yazmak zorundayız.
select FirstName,LastName,dbo.udf_SiparisSayisi(EmployeeID) from Employees

--Her müşterinin siparişlerinde kazanılan miktarı(par bazlı) ve şirket adını listeleyin.
--miktar için bir udf yazınız.
create function udf_ToplamKazanc
(
	@CustomerID char(5)
)
returns money
as
begin
	declare @Toplam money
	select @Toplam=sum(UnitPrice*Quantity*(1-Discount))
	from [Order Details] where OrderID in
	(
		select OrderID from Orders where CustomerID=@CustomerID
	)
	return(@toplam)
end

select CompanyName, dbo.udf_ToplamKazanc(CustomerID) from Customers

--içine uzun kenar ve kısa kenarı parametle olarak alan ve geriye alan donduren udf
create function udf_Dikdortgen
(
	@u int,
	@k int
)
returns int
as
begin
	return(@u*@k)
end

select dbo.udf_Dikdortgen(2,5)

--geriye merhaba mesajını döndüren fonksiyon

create function udf_Merhaba
(
	
)
returns nchar(20)
as
begin
	return ('Merhaba')
end

select dbo.udf_Merhaba()