PDA

View Full Version : حرفه ای: استفاده از ترکیب select , join , unionو سایر مخلفات در سه تیبل



Sal_64
پنج شنبه 29 مهر 1389, 22:43 عصر
سلام به همه دوستان و مهندسین گرامی

از کجا شروع کنم ! :گیج:

یه سری اعضا داریم که می بایست در محدوده زمانی مقرر که به آن دوره گفته می شود مبالغی را پرداخت کنند
دوره ها در تیبلی جداگانه تعریف میشومند
پرداخت ها در تیبل اول "واریزی" ذخیره می شوند
یه شخص در شرایطی بدون پرداخت وجه ، بعنوان پرداخت کننده تلقی و در تیبل دوم "ویژه" ثبت میشود

3 تا تیبل داریم
دو تاش شبیه به هم هستن
فیلدهای تیبل اول و دوم :
شماره عضویت - مبلغ - تاریخ پرداخت - شماره دوره - ...

تیبل اول شامل تقریبا 3000 رکورد "واریزی"
که هر شماره عضویت در طول هر دوره می تواند یک یا چند رکورد داشته باشد (یعنی شماره عضویت یکسان و دوره یکسان)- یا اصلا رکوردی نداشته باشد


تیبل دوم شامل تقریبا 500 رکورد "ویژه"
هر عضو در هر دوره تنها یک پرداخت (رکورد) میتواند داشته باشد یا اصلا رکوردی ندارد

تیبل سوم مربوط به تعریف دوره ها :
شماره دوره - تاریخ شروع - تاریخ پایان - مبلغ پرداختی- ...

تقریبا 20 رکورد با

حال چه میخواهیم :
2 نوع جواب میخواهیم در دو sp مختلف :
اول :
با ارسال شماره عضویت به sp اول
بتوان از تیبل اول تمام رکوردهایی که مربوط به شخص است برگرداندده شود
سپس از تیبل سوم "دوره" چک شود که آیا شخص به ازای تمام دوره ها رکوردی دارد یا خیر
دوره هایی که در تیبل اول نبودند انتخاب شود (مثلا: سلکت دوم)
و سپس به تیبل دوم "ویژه" رفته و اگر در آن دوره رکوردی برای آن شخص وجود دارد
آن رکورد از سلکت دوم حذف و به جایش رکورد موجود در تیبل دوم اضافه شود

شاید یه ذره پیچیده بیاد
برای روشنتر شدن موضوع لطفا به عکس زیر دقت کنید


و sp دوم :
بماند برای بعد په نتیجه رسیدن sp اول.

با تشکر فراوان

Sal_64
جمعه 30 مهر 1389, 17:45 عصر
سلام دوستان

sp : اول رو با استفاده از دو تا union حل کردم
تیبل واریزی با تیبل وئیژه و در انتها با رکوردهایی در در تیبل دوره بود اما در تیبل واریزی و وِزه نبود


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

البته در خود برنامه با گذاشتن یه حلقه میتونم حلش کنم
میخوام بدونم آیا براش راه حلی در sql میشه پیدا کرد


با تشکر