پاسخ به:آموزش گام به گام SQL Server
پنج شنبه 30 تیر 1390 11:36 AM
سلام دوباره
مثالی از توابع تجمعی :
مثال : یک SP جهت استفاده در خروجی مدیریتی ذیل طراحی نمائید.
![]()
![]()
واحد سازمانی تعداد کارکنان تعداد تحت تکفل
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
همانطور که از ظاهر جدول مشاهده می گردد به دو روش گزارش مذکور قابل وصول است.
روش اول : جدول اصلی جدول Unit و جداول ارتباطی Child , Person خواهند بود بنابراین خواهیم داشت :
Create Proc MIS1 AS
Select UnitName ,
(Select Count (*) From Person Where UnitID = U.UnitID )As PCnt ,
(Select Count (*) From Child Where
(Select UnitID From Person Where PrsID=Child.PrsID)=U.UnitID)As TCnt,
From Unit As U
Order By UnitName
روش دوم : جدول اصلیPerson و جدول ارتباطیChild ,Unit خواهند بود بنابراین خواهیم داشت:
Create Proc MIS2 AS
Select (Select UnitName Form Unit Where UnitID = P1.UnitID)As UnitName,
Count (*) As PCnt,
(Select Count(*) From Child Where (Select UnitID From Person P2 Where PrsID
= Child.PrsID ) = P1.UnitID ) As TCnt
From Person P1
Group By UnitID
Order By 1
مسئله : اختلاف اطلاعات نمایش داده شده در دو روش اول و دوم را تشریح نمائید.
مثال : یکSP طراحی کنید که فهرست کارکنانی را که بین 3 تا 6 تحت تکفل دارند را استخراج نماید.
به منظور سهولت در طراحی جدول Person را بعنوان جدول اصلی در نظر می گیریم بنابراین خواهیم داشت :
Create Proc MySP1 AS
Select P.*,
(Select Count(*) From Child C Where PrsID = P.PrsID )As Cnt
From Person As P
Where (Select Count (*) From Child Where PrsID= P.PrsID) BetWeen 3 and 6
Order By PrsID
ادامه مثالها در پست بعدی ...
منتظر ما باشید
مو فق باشید