ورود

نسخه کامل مشاهده نسخه کامل : چگونه Group By مورد نظر را بگیرم؟؟؟



ahmad_r
25-02-2010, 10:16
برنامه اي را در نظر بگيريد که داراي پروژه هاي مختلفي است که روند تکامل هر پروژه از شروع تا پايان بايد ذخيره شود

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

همان طور که می بینید براي اين پروژه دو جدول طراحي کرده ام يکي به نام پروژه (که دارای یک فیلد کلید به نام آی دی می باشد) يکي به نام پيگيري. (فیلد وضعیت رشته است)

کوئری که میخواهم بگیرم به صورت زیر است

"وضعیت آخرین تاریخ پیگیری هر کد"

SELECT ProjeID, MAX(T_Peigiri) AS AkharinTarikh
FROM dbo.Pursue
GROUP BY ProjeID

تا اینجا مشکلی وجود نداره و رکوردها را گروپ بندی شده نمایش می دهد
اما هدف کوئری نمایش وضعیت رکوردهاست که با اضافه کردن آن اجرا نمی شود. علی الظاهر در گروپ بای نمی توان خود فیلد را نمایش داد و حتما باید از توابعی مثل MAX ,Min ,Count,... استفاده شود

SELECT ProjeID, MAX(T_Peigiri) AS Expr1, Vazeivat
FROM dbo.Pursue
GROUP BY ProjeID

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

_H2_
26-02-2010, 01:29
سلام
مشکل شما به سادگی قابل حل است ...
ولی کلید جدول دوم چیست؟؟؟ جدول بی کلید عین ملک بی صاحب است؟؟؟ با قوانین نرمال سازی هم مغایرت دارد!

ahmad_r
26-02-2010, 09:06
علی الظاهر عکسها مشکل دارن لذا من یه با فیلدهای مهمو میگم:

پروژه: کد (کلید) ـ نام ـ تاریخ شروع و...

پیگیر: کد پروژه ـ تاریخ پیگیری ـ وضعیت
کد و کد پروژه به هم وصل اند


پس می فرمائید حتما باید یه کلید برای جدول پیگیری بگذارم...

حال چگونه وضعیت را نمایش دهم؟؟؟

_H2_
27-02-2010, 12:41
سلام
هر جدول شما حتماً باید PrimaryKey داشته باشد.

در سوال اولیه شما اگر جمع ProjeID و T_Peigiri یکتا باشد (حتی اگر T_Peigiri تاریخ نباشد میشود این دو فیلد با هم PrimaryKey باشند) کد زیر مشکلتان را حل میکند:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اگر جدول دوم PrimaryKey-AutoNumber داشته باشد به جای T_Peigiri میتوانید از این فیلد برای تشخیص آخرین مورد ثبت شده استفاده کنید.

این موارد مشروط به فیلد کلید و یا یکتا بودن اجتماع فیلدهای groupby و توابع جمعی میباشد.