سثلام دوستان من یک جدول دارم که حاوی سه فیلد بدهکار - بستانکار و تاریخ هست ، حالا میخوام ستون مانده رو هم به این جدول اضافه کنم میشه راهنماییم کنید که چطور میتونم این کار رو انجام بدم ؟؟؟
مثلا :
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سثلام دوستان من یک جدول دارم که حاوی سه فیلد بدهکار - بستانکار و تاریخ هست ، حالا میخوام ستون مانده رو هم به این جدول اضافه کنم میشه راهنماییم کنید که چطور میتونم این کار رو انجام بدم ؟؟؟
مثلا :
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بهتره که به صورت فیلد نباشه. بلکه از این دو فیلد دیگه اون رو محاسبه کنی.
فکر می کنم این کد جواب بده:
select اول جمع ستون بستانکار و ستون دوم جمع ستون بدهکار رو بدست می آره و از هم تفریق می کنه.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ممنون حمید جان ولی منظور من این نبود .
ببین میخوام مانده صندوق پس از همون رکورد نشون داده بشه مثلا :
مانده صندوق 200 تومن بوده و 100 تومن دریافت شده مانده بشه 300
تو رکورد بعدی اگه 200 تومن پرداخت بشه مانده رو نشون بده 100 تومن
و به همین شکل تا آخرین رکورد که مانده واقعی صندوق رو نشون میده و باید با کوئری ای که شما نوشتید برابر باشه
اگه منظورتون اینه باز هم نیازی نیست یه فیلد جداگانه داشته باشید.
احتمالاً با برنامه نویسی SQL (tsql) می شود این کار رو کرد ولی من بلد نیستم. یعنی به صورت برنامه نویسی هر دفعه یه محاسبه ای انجام داد و اون وبر گردوند.
ولی چیزی که به ذهنم می رسه اینه که خودتون به صورت برنامه نویسی این کار رو انجام بدهید. یعنی اول جدول شامل فیلد های بدهکار و بستانکار رو بگیرید و بعد توی یه حلقه الگوریتم رو روش اعمال کنید.
البته اگه یه فیلد جداگانه در نظر بگیرید، می تونید در موقع insert کردن ابتدا دستور select بالا رو اجرا کنید تا مقدار فعلی رو به دست بیاورید. سپس مقدار بستانکار یا بدهکار رو از اون کم یا اضافه کنید و اون رو توی ستون مانده بنویسید.
حاجي ، حميد راست ميگه نبايد داخل ديتا بيس اطلاعات محاسباتي رو نگه داشت
يعني نبايد اطلاعاتي كه ميشه از محاسبه دو فيلد ديگر بدست آور را در فيلد ديگر قرار دا
چه كتابي شد !
البته اگه اسرار داري ميشه هر زماني كه ديتابيست دار رفرش ميشه اين محاسبه رو انجام بده و بزاري داخل فياد مورد نظرت
مثلا زمان اضافه كردن ركورد ، گزار شگيري ....
نه جانم من قصد انجام این کار رو ندارم
چون این کار علاوه بر افزونگی فوق العاده زیاد ممکنه باعث ناسازگاری هم بشه !!!!
حمید جان خیلی خیلی ممنون از راهنماییت ولی با برنامه نوسی نمیخوام این کار رو بکنم به دو دلیل :
1- سرعتش چندان مطلوب نیست (انجام دادم سرعتش کم بود)
2-میخوام این کارهای پردازشی رو بندازم گردن سرور
3-میخوام مستقیما هم از سرور گزارش بگیرم (بدون برنامه با مشاهده ویو)
سومی خیلی واسم مهمه چون مثلا میخوام فاکتور 2 ماه پیش آقای X رو چاپ کنم و در پایین فاکتور مانده حسابش رو هم نشون بدم بعد از صدور فاکتور که با وجود View نیاز به کد نویسی اضافه ندارم
جواب سوالم رو جناب مهندس ثباتی در انجمن برنامه نویس دادن :
شیوه حلش واسم جالب بود 2 تا راه پیشنهاد دادکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اولی از یک جدول میانی استفاده میکنه که سریع تره ولی من ترجیح نمیدم
و در دومی با استفاده از Rank`میاد و به هر ستون یک شماره (ID) اختصاص میده و ستون مانده رو میکنه مجموع بدهکار - بستانکار ستونهای با رنک کمتر از ستون فعلی . این دستور در ویو قابل پیاده سازیه
یه نمونه جدول میندازم واسه دوستانی که سوال منو دارن
Last edited by bad_boy_2007; 14-12-2008 at 19:48.
اسکریپت دیتابیس :
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خروجی :
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام. در لینک زیر با یک روش ابتکاری این مورد رو توسط SQL Server حل کرده:
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
امید است به کار آید.
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)