پاسخ به:آموزش گام به گام SQL Server
پنج شنبه 30 تیر 1390 11:43 AM
سلام
ادامه مثالهای توابع تجمعی :
مثال : تابعی برای محاسبه تعداد افراد تحت تکفل یک شخص طراحی کنید و سپس با استفاده از آن یک SP جهت تعیین فهرست کارکنانی که بیش از n تحت تکفل دارند بنویسید :
ابتدا تابعی بنام NoChild که کد پرسنلی ورودی آن است به شکل ذیل طراحی می کنیم.
Create Function NoChild (@P Int )
Returns TinyInt
As
Begin
Declare @Cnt TinyInt
Set @Cnt = (Select Count(*) From Child Where PrsID = @P )
Return @Cnt
36
END
البته در این تابع بدون تعریف متغیر Cnt می توانید دستور SubQuery را مستقیماً توسط Return باز گردانید پس ازطراحی تابعNoChild می توانیدSP موردنظر را به شکل ذیل با پارامترها ورودی n طراحی نمائید.
Create Proc MySP2 @n TinyInt
As
Select * , dbo.NoChild (PrsID)
From Person
Where dbo.NoChild (PrsID) > = @n
Order By PrsID
مثال : بااستفاده از تابع فهرست کارکنان را براساس بالاترین مدرک تحصیلی افراد تحت تکفل آنها مرتب کنید.
ابتدا تابعی طراحی می کنیم که بزرگترین مدرک تحصیلی افراد تحت تکفل یک شخص را استخراج نماید که در این حالت فرض شده است که با افزایش مدرک تحصیلی میزان کد مدرک تحصیلی نیز افزایش خواهد یافت بنابراین خواهیم داشت:
Create Function dbo.MaxCL (@PID Int)
Returns TinyInt
As
Begin
Return (Select Max(LID) From ChdLvL
Where PrsID = @PID )
END
حال دستور SQL درخواست شده را می نویسیم بنابراین :
Select * , dbo.MaxCL(PrsID) AS CMCL ,
(Select LName From LvL Where LID=dbo.MaxCL(P.PrsID)) AS NMCL
From Person AS P
Order By CMCL Desc , PrsID
مثال : بااستفاده از تابع تعیین کنید که هر واحد سازمانی در چه نسبت جمعیت شهری واقع شده است.
ابتدا تابعی می نویسیم که تعیین کند که هر واحد سازمانی در چه جمعیتی واقع شده است بدین منظور به شکل ذیل عمل می کنیم:
Create Function SumPoP (@CID SmallInt)
Returns Int AS Begin
Return (Select PoPulate From City Where CityID = @CID)
37
END
براساس این تابع می توان دستور SQL موردنظر را به شکل ذیل پیاده سازی کرد.
Declare @S BigInt
Set @S = ( Select Sum( PoPulate ) From City )
Select * , dbo. Sumpop (CityID) / @S * 100 AS SPP
From Unit
Order By SPP Desc
خب دوستان, تا اینجا توابع تجمعی به اتمام رسید.
در پست بعد دستور Insert رو توضیح می دم.
موفق باشید