--functions
--scalar functions operate on one row at time
--table valued function
--aggregate functions
use automart
go
--here is an a very simple function
Create function fx_Cube
(@number int ) --parameters, provided by the user
returns int --return type for the function note the s
As
Begin -- begin function
Declare @Cube int --declare a variable
Set @Cube = @number * @number * @number
return @cube --value to return
End
Go
--using the function
Select dbo.fx_Cube(37) as Cube
go
--altering the function to change the data type
alter function fx_Cube
(@number money )
returns money
As
Begin
Declare @Cube money
Set @Cube = @number * @number * @number
return @cube
End
Go
---use the changed function
Select ServicePrice, dbo.fx_cube(ServicePrice) as increase
From Customer.AutoService
Go
--this uses an if statement
Create function fx_GetPercent
(@number decimal(10,2), @percent decimal(3,2))
Returns decimal(10,2)
As
Begin
Declare @percentage decimal(10,2)
Set @Percentage = @number * @Percent
Return @Percentage
End
Go
Select ServicePrice, dbo.fx_GetPercent(ServicePrice, .05) Discount,
ServicePrice -dbo.fx_GetPercent(ServicePrice, .05) DiscountedPrice
From Customer.AutoService
Go
--added an if statement
Alter function fx_GetPercent
(@number decimal(10,2), @percent decimal(3,2))
Returns decimal(10,2)
As
Begin --begin function
Declare @percentage decimal(10,2)
if @Percent > 1
Begin --begin if
Set @Percent=@Percent /100
End --end if
Set @Percentage = @number * @Percent
Return @Percentage
End --end function
--- price is the autoservice table
-- in employee service detail discount percent and tax percent
--0's have
Go
Alter function fx_Percentages
(@amount decimal(10,2), @percent decimal(3,2))
returns decimal(10,2)
AS
Begin --begin function
Declare @result decimal(10,2)
if @amount != 0
Begin
Set @result =@Amount-(@amount * @Percent)
End --end if
Else
Begin --begin else
Set @result=@amount
End --end else
return @Result
End --end function
Go
Select * From Employee.VehicleServiceDetail
-- Here are a couple of fairly complex queries to figure out
--the totals for a service
Select VehicleServiceID, ServiceName, ServicePrice, DiscountPercent,
dbo.fx_Percentages(ServicePrice, DiscountPercent) as [Discount Price],
dbo.fx_GetPercent(ServicePrice, TaxPercent) as Tax
From Customer.AutoService a
inner join Employee.VehicleServiceDetail vsd
on a.AutoServiceID=vsd.AutoServiceID
Where VehicleServiceID=3
Select VehicleServiceID,
Sum(dbo.fx_Percentages(ServicePrice, DiscountPercent)) as SubTotal,
Sum(dbo.fx_GetPercent(ServicePrice, TaxPercent)) as Tax,
Sum(dbo.fx_Percentages(ServicePrice, DiscountPercent) +
dbo.fx_GetPercent(ServicePrice, TaxPercent)) as Total
From Customer.AutoService a
inner join Employee.VehicleServiceDetail vsd
on a.AutoServiceID=vsd.AutoServiceID
Where VehicleServiceID=3
Group by VehicleServiceID
Wednesday, February 19, 2014
Home made Functions
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment