PDA

View Full Version : چطوری این Qury رو بدست بیارم؟



raika17metal
جمعه 28 مرداد 1390, 23:52 عصر
با سلام. من یه بانک طراحی کردم که که بخشی از دیاگرامش مثل این شکل هستش :

74081
در جدول tblStudent (مشخصات دانشجو)
در جدول tblCourse (نام دوره ها) مثل برنامه نویسی، طراحی سایت و ...
در جدول tblClass (کلاس ها) نام کلاسی که برای هر دوره برگزار میشه مثلا برنامه نویسی در تاریخ 90/1/1
در جدول tblResult (نتایج)، نتیجه آزمونی رو که دانشجو در اون شرکت کرده ثبت می کنم.
حالا قصد دارم یه Qury بگیرم که مشخصات دانشجو، مشخصات درس و نمره ای رو که در آزمون هر درس کسب کرده نمایش بدم.

مشکل : در جدول نتایج (tblResult) توسط فیلد Grade (نمره) میشه تشخیص داد که این دانشجو در آزمون درسی مثلا برنامه نویسی که شرکت کرده، قبول شده یا نه، من میخوام علاوه بر این مورد، در درس هایی که ثبت نام کرده اما در آزمونش شرکت نکرده عبارت ("شرکت نکرده است") ظاهر بشه.
چی کار باید بکنم؟:لبخند:

یوسف زالی
شنبه 29 مرداد 1390, 00:50 صبح
سلام.
Join رو کنید Left Join و یک فیلد به فرم زیر در ستون هاتون اضافه کنید:
case when ResultID is Null then 'sherkat nakarde' when QuizRate > 10 then 'ghabul' else 'mardood' end as Vaziat

حالا با کمی اصلاح در رابطه با نام ها..

raika17metal
شنبه 29 مرداد 1390, 01:26 صبح
ممنون از لطفتون. حالا اگه بخوام قسمت مردود و قبول رو حذف کنم و در صورت غیر NULL بودن، خود نمره نمایش داده بشه باید به چه صورت تغییر بدم؟

یوسف زالی
شنبه 29 مرداد 1390, 01:53 صبح
نمره رو جاش بذارید!
:قهقهه:
فقط باید cast(nomre as varchar(3)) --typecast انجام بدید.

raika17metal
شنبه 29 مرداد 1390, 03:31 صبح
اونم انجام شد اما به یه مشکل خیلی بد، برخورد کردم، اگه یه دانشجو در 3 تا درس ثبت نام کرده باشه و فقط در یکی از آزمون ها شرکت کرده باشه نمره اون یه درس برای هر سه درس نشون داده میشه. INNER JOIN و LEFT OUTER رو خیلی دست کاری کردم اما نشد که نشد. اینم کدی که نوشتم، دیاگرام بانکم هم که تو تصویر بالا هستش.


SELECT (St.FirstName+' '+St.LastName)AS'نام دانشجو' ,
Co.CourseName AS 'نام درس',
CASE
WHEN Res.StID IS NULL THEN 'شرکت نکرده'
ELSE CAST(Res.Grade AS VARCHAR)
END AS 'نمره'
FROM tblStudents AS St INNER JOIN tblRegister AS Re
ON St.StID = Re.StID left outer JOIN tblResults AS Res
ON St.StID = Res.StID INNER JOIN tblClass AS Cl
ON Re.ClassID = Cl.ClassID INNER JOIN tblCourse AS Co
ON Cl.CourseID = Co.CourseID
74093