# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > ابزارهای گزارش سازی >  لیست حضور و غیاب کلاس

## pcseven

(این صرفا یک مثال است و اگر چیزی شبیه این سراغ دارید باز هم ممنون می شوم که راهنمایی کنید)

فرض کنید سه جدول با فیلد های زیر داریم:

*دانشجو* (کد دانشجو ، نام و نام خانوادگی، شماره دانشجویی)
*درس* (کد درس، عنوان درس)
*تشکیل کلاس* (کد تشکیل کلاس، کد درس، تاریخ)
*حضور و غیاب* (کد حضور و غیاب، کد تشکیل کلاس، کد دانشجو)

هر جلسه از کلاس که تشکیل می شود، در جدول تشکیل کلاس ثبت می شود.
حاضرین در هر جلسه تشکیل شده در جدول حضور و غیاب ثبت می شوند.

چگونه می توان Query نوشت که نتیجه آن چیزی شبیه لیست حضور و غیاب باشد؟

هدف چاپ یک لیست حضور و غیاب است. در واقع ادغام دو جدول به شکلی که داده های جدول اول، عناوین ستون های جدول حاصل باشند و داده های جدول دوم زیر این عناوین قرار گیرند.

----------


## hasan_esfahan

شما می توانید ابتدا یک گروه تشکیل بدهید که این گروه بر اساس فیلد کد درس از جدول درس باشد با این کار درس ها از هم جدا می شوند سپس در قسمتی که گروه را ایجاد کردید زیر ان دوباره یک گروه دیگر ایجاد کرده که این گروه بر اساس کد تشکیل کلاس می باشد از جدول تشکیل کلاس. خوب تا اینجا شما کلاس ها و درس ها را از هم جدا کردید اما شما با کد تشکیل کلاس می تونید دانشجویان ان کلاس را نمایش دهید برای این کا هم می تونید یک subreport ایجاد کرده و مشخصات دانشجو را در ان نمایش داد در اخر البته کمی کار پیچیده است اما به هر حال اگر مرحله به مرحله پیش بروید می تونید انجام دهید

----------


## mom alone

من برای حضور و غیاب افراد در شرکت یه کوری نوشتم
سه جدول دارم
1- اعضاء == دانشجو ی شما
2- جدول شیفت == جدول تشکیل کلاس شما
3- جدول حضور == جدول حضور و غیاب شما
 حالا بگم از کوری

SELECT      ISNULL(derivedtbl_1.tarikh, 0) AS tarikh, derivedtbl_1.vorod, derivedtbl_1.khoroj, derivedtbl_1.tozihat, derivedtbl_1.flag, 
                      ISNULL(dboshiftriz.tarikh, 0) AS tarikhshft, dboshiftriz.az, dboshiftriz.ta, derivedtbl_1.kodperso, dboshiftriz.kodshift
FROM         (SELECT     tarikh, vorod, ISNULL(khoroj, 0) AS khoroj, tozihat, flag, kodperso
                        FROM         dbo.rozafrad
                        WHERE     (kodperso = N'68/56/803-10011')) AS derivedtbl_1 FULL OUTER JOIN
                          (SELECT     tarikh, az, ta, kodshift
                             FROM         dbo.shiftriz
                             WHERE     (kodshift = 1)) AS dboshiftriz ON derivedtbl_1.tarikh = dbo.shiftriz.tarikh

بگم که جواب گرفتم اگه مشکلی داشتی بگو
از FULL OUTER JOIN  استفاده کن
با فرمول نویسی می تونی تعیین کنی که اگه فیلد تاریخ در جدول حضور و غیاب null  بود اون رکورد رو غیبت در نظر بگیرد و....

----------


## pcseven

ممنون از لطفتون
فکر کنم با دستور *PIVOT* که در SQL Server 2005 اضافه شده، میشه این کار رو انجام داد.
شما با این دستور کار نکردید ؟ اگر موفق شدم کد رو همینجا قرار میدم.

About PIVOT & UNPIVOT:
http://msdn.microsoft.com/en-us/library/ms177410.aspx




> من برای حضور و غیاب افراد در شرکت یه کوری نوشتم
> سه جدول دارم
> 1- اعضاء == دانشجو ی شما
> 2- جدول شیفت == جدول تشکیل کلاس شما
> 3- جدول حضور == جدول حضور و غیاب شما
>  حالا بگم از کوری
> 
> SELECT      ISNULL(derivedtbl_1.tarikh, 0) AS tarikh, derivedtbl_1.vorod, derivedtbl_1.khoroj, derivedtbl_1.tozihat, derivedtbl_1.flag, 
>                       ISNULL(dboshiftriz.tarikh, 0) AS tarikhshft, dboshiftriz.az, dboshiftriz.ta, derivedtbl_1.kodperso, dboshiftriz.kodshift
> ...

----------

