0

آموزش گام به گام SQL Server

 
cryingsphere
cryingsphere
کاربر نقره ای
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 375
محل سکونت : خراسان رضوی

پاسخ به:آموزش گام به گام 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 رو توضیح می دم.

موفق باشید

تشکرات از این پست
دسترسی سریع به انجمن ها