PDA

View Full Version : INNER jOIN با شرایط خاص



@AM!R!
چهارشنبه 12 دی 1386, 14:15 عصر
سلام دوستان
من دو جدول دارم که یکی اطلاعات اعضا رو نگهداری میکنه و دیگری مثل کاردکس اطلاعات اقساط ماهیانه هر عضو رو ثبت میکنه.
حالا چطوری میشه وقتی با INNER JOIN دو جدول رو به هم JOIN میکنم آخرین رکورد هر شخص رو بیاره تا از اون مانده و تعداد اقساط باقیمانده رو کم کنم.
با تشکر

SYNDROME
چهارشنبه 12 دی 1386, 15:41 عصر
سلام دوستان
من دو جدول دارم که یکی اطلاعات اعضا رو نگهداری میکنه و دیگری مثل کاردکس اطلاعات اقساط ماهیانه هر عضو رو ثبت میکنه.
حالا چطوری میشه وقتی با INNER JOIN دو جدول رو به هم JOIN میکنم آخرین رکورد هر شخص رو بیاره تا از اون مانده و تعداد اقساط باقیمانده رو کم کنم.
با تشکر


Select *
From Tbl1
Inner Join tbl2
On Tbl1.Persona = Tbl2.Persona And Tbl2.X =1

در کد بالا من دو تا جدول را با هم Join کرده ام و با فیلد X که مشخص کننده پرداخت قسط است فقط اقساطی را می آوردم که پرداخت شده است و حالا شما با یک Sort می توانید آخرین قسط پرداختی را مشخص کنید.
موفق باشید

@AM!R!
چهارشنبه 12 دی 1386, 16:47 عصر
دوست عزیز ممنون
اقساط پرداخت شده فقط با یک عدد مشخص می شود که هر بار پس از کسر قسط باید یک واحد از آن کسر شود.
منظورتان از Tbl2.X=1 چیست؟

dkhatibi
چهارشنبه 12 دی 1386, 17:43 عصر
حالا چطوری میشه وقتی با INNER JOIN دو جدول رو به هم JOIN میکنم آخرین رکورد هر شخص رو بیاره تا از اون مانده و تعداد اقساط باقیمانده رو کم کنم.
در صورتیکه تاریخ داردی روی اون Order بگذارید اگر هم یک فیلد Primary اضافه شونده دارید روی اون Order کنید نمی شه؟

@AM!R!
چهارشنبه 12 دی 1386, 17:55 عصر
چون اطلاعات اقساط تمام اعضا در جدول دوم هست خیلی نمیشه روی order مانور داد.

A.Nemati
چهارشنبه 12 دی 1386, 18:30 عصر
در طراحی جدول اقساط از چه روشی استفاده کردی؟:
1- تعداد اقساط هر شخص و زمان پرداخت هر قسط مشخص است و برای هر یک قبلا یک رکورد ایجاد کرده‌ای و حالا فقط می‌خواهی مشخص کنی که مثلا قسط n در چه تاریخی پرداخت شده؟
2- تعداد اقساط هر شخص مشخص نیست و هر دفعه که قسط پرداخت می‌شه، یک رکورد ایجاد می‌کنی که مبلغ، تاریخ پرداخت، تعداد اقساط باقیمانده و ... را ثبت می‌کنی؟
3- ؟

اگه اینو بدونیم بهتر می‌شه بهت کمک کرد.

SYNDROME
چهارشنبه 12 دی 1386, 18:42 عصر
منظورتان از Tbl2.X=1 چیست؟
فیلد X یک فیلد از نوع Bit است که اگر قسطی پرداخت شود برابر با 1 و در غیر این صورت برابر با 0 است.
البته این یک روش است برای مشخص کردن اقساط پرداخت شده.
حالا شما هر شرطی دارید می توانید به جای شرط فوق بگذارید.
موفق باشید

@AM!R!
چهارشنبه 12 دی 1386, 19:04 عصر
آقای نعمتی
قسمت اول 1 و قسمت دوم 2 صحیح است.
یعنی ابتدا فاکتور برای عضو ثبت می شود که شامل اطلاعات تارخ،شرح کالا، مبلغ هر قسط، تعداد اقساط و ...
سپس در سررسید هر قسط اپراتور برای این فاکتور یک رکورد جدید می سازد که در آن تقریبا اطلاعات فوق تکرار می شود بعلاوه اینکه تاریخ بروزرسانی و نیز از فیلد اقساط باقیمانده نیز یک واحد کم میشود.
البته روش فوق دارای افزونگی بسیار بالای می باشد ولی به درخواست مشتری باید سوابق اقساط نیز در جدول ثبت شود.

@AM!R!
پنج شنبه 13 دی 1386, 10:50 صبح
من با روشی که میدونم بهینه نیست از یک جدول کمکی استفاده کردم ولی بازم جواب نگرفتم.
چیزی به نظر شما نمی رسه؟

A.Nemati
پنج شنبه 13 دی 1386, 13:02 عصر
شما ID فاکتور مربوطه رو به این کوئری پاس بده (FRecordID@)، آخرین قسطی که برای این فاکتور پرداخت شده رو به شما برمی‌گردونه.


select top 1 * from TblFactor f
Join TblAghsat a on f.RecordID = a.FactorRecordID
Where FactorRecordID = @FRecordID
Order By a.PayDate desc


امیدوارم مشکلت رو حل کنه

@AM!R!
پنج شنبه 13 دی 1386, 17:06 عصر
ممنون از توجه شما
امتحان می کنم بهتون جواب می دم.
ولی باید بگم که شماره فاکتور و تعداد اقساط و تاریخ و .... همه تو یه جدول هستند.

@AM!R!
پنج شنبه 13 دی 1386, 17:30 عصر
آقای نعمتی واقعا دمت گرم خیلی حال دادی با کمی تغییر کد کار کرد.
حالا اگه بخوام همین جستجو رو طوری تغییر بدم که فاکتورهایی که اقساط باقیمانده آنها بیشتر از 0 است رو بیاره
این شرط چطوری باید در کد شما اضافه بشه؟
واقعا ممنون]
SELECT Top 1 * FROM Tbl_Members M INNER JOIN Tbl_Cardex C ON
M.No_Member=C.No_Member
Where No_Fact=@FRecordID
Order By C.PaymentsRemain asc

@AM!R!
شنبه 15 دی 1386, 23:13 عصر
کسی در مورد مشکل فوق چیزی میدونه؟

SYNDROME
یک شنبه 16 دی 1386, 05:59 صبح
اگر می خواهی چنین شرطی قرار دهی باید از دستور Having استفاده کنی.
در سایت همین کلمه را جستجو کن.
موفق باشید

@AM!R!
یک شنبه 16 دی 1386, 09:27 صبح
دو جدول دارم جدول اعضا و جدول کاردکس
در جدول اعضا مشخصات افراد و فیلد مانده وجود دارد.
در جدول کاردکس مشخصات فاکتور و اقساط برای عملیات ماهیانه است مانند : تاریخ خرید، شماره فاکتور، شرح کالا، تعداد اقساط(باقیمانده)، مبلغ هر قسط، قیمت کل ، بدهکار ، بستانکار
پرس و جوی مورد نظر:
1- تمام اعضایی که تاریخ سررسید قسط شان رسیده باشد (بر اساس تاریخ خرید ) و مانده آنها صفر نباشد.
2- از اعضا لیست شده در مرحله قبل (و با توجه به شماره فاکتوری که سررسید قسط آن فرا رسیده) آخرین قسط فاکتور مذکور را یافته و به شرطی که اقساط باقیمانده آن صفر نشده باشد آن را لیست کن.
(تا اپراتور نسبت به عملیات کسر قسط از مانده اقدام نماید)
شاید باید از Sub Query استفاده شود ولی چون یک مقداری پیچیده است. مرا گیج کرده لطفا اگر می توانید به من کمک کنید.

@AM!R!
یک شنبه 16 دی 1386, 10:34 صبح
مشکل اینجاست که اگه فاکتوری تعداد اقساط باقیماندش به صفر رسیده بود نباید در نتیجه پرس و جو وارد بشه
و من چه از INNER JOIN و چه از SubQuery استفاده می کنم بازم اون آخرین رکورد که اقساط باقیمانده آن صفر هست رو نیز میاره


SELECT Top 1 M.No_Member,M.No_Employee,M.Fname,M.Lname,M.Mande,
C.[Date],C.LastUpdate,C.Des_Object,C.No_Fact,C.Payment,C.B ed,C.PaymentsRemain
FROM Tbl_Members M,Tbl_Cardex C WHERE M.Mande>0 AND C.LastUpdate='1386/11/30' AND C.No_Member IN
(Select No_Member From Tbl_Cardex Where PaymentsRemain>0) Order by PaymentsRemain ASC