ورود

نسخه کامل مشاهده نسخه کامل : مشکل تو نوشتن دستور Select



bad_boy_2007
06-12-2008, 19:13
سثلام دوستان من یک جدول دارم که حاوی سه فیلد بدهکار - بستانکار و تاریخ هست ، حالا میخوام ستون مانده رو هم به این جدول اضافه کنم میشه راهنماییم کنید که چطور میتونم این کار رو انجام بدم ؟؟؟

مثلا :

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

hamidreza_buddy
06-12-2008, 19:55
بهتره که به صورت فیلد نباشه. بلکه از این دو فیلد دیگه اون رو محاسبه کنی.

فکر می کنم این کد جواب بده:

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

select اول جمع ستون بستانکار و ستون دوم جمع ستون بدهکار رو بدست می آره و از هم تفریق می کنه.

bad_boy_2007
06-12-2008, 21:34
بهتره که به صورت فیلد نباشه. بلکه از این دو فیلد دیگه اون رو محاسبه کنی.

فکر می کنم این کد جواب بده:

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

select اول جمع ستون بستانکار و ستون دوم جمع ستون بدهکار رو بدست می آره و از هم تفریق می کنه.

ممنون حمید جان ولی منظور من این نبود .
ببین میخوام مانده صندوق پس از همون رکورد نشون داده بشه مثلا :
مانده صندوق 200 تومن بوده و 100 تومن دریافت شده مانده بشه 300
تو رکورد بعدی اگه 200 تومن پرداخت بشه مانده رو نشون بده 100 تومن
و به همین شکل تا آخرین رکورد که مانده واقعی صندوق رو نشون میده و باید با کوئری ای که شما نوشتید برابر باشه

hamidreza_buddy
08-12-2008, 13:22
اگه منظورتون اینه باز هم نیازی نیست یه فیلد جداگانه داشته باشید.

احتمالاً با برنامه نویسی SQL (tsql) می شود این کار رو کرد ولی من بلد نیستم. یعنی به صورت برنامه نویسی هر دفعه یه محاسبه ای انجام داد و اون وبر گردوند.

ولی چیزی که به ذهنم می رسه اینه که خودتون به صورت برنامه نویسی این کار رو انجام بدهید. یعنی اول جدول شامل فیلد های بدهکار و بستانکار رو بگیرید و بعد توی یه حلقه الگوریتم رو روش اعمال کنید.

البته اگه یه فیلد جداگانه در نظر بگیرید، می تونید در موقع insert کردن ابتدا دستور select بالا رو اجرا کنید تا مقدار فعلی رو به دست بیاورید. سپس مقدار بستانکار یا بدهکار رو از اون کم یا اضافه کنید و اون رو توی ستون مانده بنویسید.

mbd1366
08-12-2008, 15:41
حاجي ، حميد راست ميگه نبايد داخل ديتا بيس اطلاعات محاسباتي رو نگه داشت
يعني نبايد اطلاعاتي كه ميشه از محاسبه دو فيلد ديگر بدست آور را در فيلد ديگر قرار دا
چه كتابي شد !

mbd1366
08-12-2008, 15:42
البته اگه اسرار داري ميشه هر زماني كه ديتابيست دار رفرش ميشه اين محاسبه رو انجام بده و بزاري داخل فياد مورد نظرت
مثلا زمان اضافه كردن ركورد ، گزار شگيري ....

bad_boy_2007
14-12-2008, 18:06
حاجي ، حميد راست ميگه نبايد داخل ديتا بيس اطلاعات محاسباتي رو نگه داشت
يعني نبايد اطلاعاتي كه ميشه از محاسبه دو فيلد ديگر بدست آور را در فيلد ديگر قرار دا
چه كتابي شد !

نه جانم من قصد انجام این کار رو ندارم
چون این کار علاوه بر افزونگی فوق العاده زیاد ممکنه باعث ناسازگاری هم بشه !!!!

bad_boy_2007
14-12-2008, 18:15
اگه منظورتون اینه باز هم نیازی نیست یه فیلد جداگانه داشته باشید.

احتمالاً با برنامه نویسی SQL (tsql) می شود این کار رو کرد ولی من بلد نیستم. یعنی به صورت برنامه نویسی هر دفعه یه محاسبه ای انجام داد و اون وبر گردوند.

ولی چیزی که به ذهنم می رسه اینه که خودتون به صورت برنامه نویسی این کار رو انجام بدهید. یعنی اول جدول شامل فیلد های بدهکار و بستانکار رو بگیرید و بعد توی یه حلقه الگوریتم رو روش اعمال کنید.

البته اگه یه فیلد جداگانه در نظر بگیرید، می تونید در موقع insert کردن ابتدا دستور select بالا رو اجرا کنید تا مقدار فعلی رو به دست بیاورید. سپس مقدار بستانکار یا بدهکار رو از اون کم یا اضافه کنید و اون رو توی ستون مانده بنویسید.

حمید جان خیلی خیلی ممنون از راهنماییت ولی با برنامه نوسی نمیخوام این کار رو بکنم به دو دلیل :
1- سرعتش چندان مطلوب نیست (انجام دادم سرعتش کم بود)
2-میخوام این کارهای پردازشی رو بندازم گردن سرور
3-میخوام مستقیما هم از سرور گزارش بگیرم (بدون برنامه با مشاهده ویو)

سومی خیلی واسم مهمه چون مثلا میخوام فاکتور 2 ماه پیش آقای X رو چاپ کنم و در پایین فاکتور مانده حسابش رو هم نشون بدم بعد از صدور فاکتور که با وجود View نیاز به کد نویسی اضافه ندارم

جواب سوالم رو جناب مهندس ثباتی در انجمن برنامه نویس دادن :

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

شیوه حلش واسم جالب بود 2 تا راه پیشنهاد داد
اولی از یک جدول میانی استفاده میکنه که سریع تره ولی من ترجیح نمیدم
و در دومی با استفاده از Rank`میاد و به هر ستون یک شماره (ID) اختصاص میده و ستون مانده رو میکنه مجموع بدهکار - بستانکار ستونهای با رنک کمتر از ستون فعلی . این دستور در ویو قابل پیاده سازیه
یه نمونه جدول میندازم واسه دوستانی که سوال منو دارن

bad_boy_2007
14-12-2008, 19:56
اسکریپت دیتابیس :

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


خروجی :


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

najafzade
23-12-2015, 01:26
سثلام دوستان من یک جدول دارم که حاوی سه فیلد بدهکار - بستانکار و تاریخ هست ، حالا میخوام ستون مانده رو هم به این جدول اضافه کنم میشه راهنماییم کنید که چطور میتونم این کار رو انجام بدم ؟؟؟

مثلا :

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

سلام. در لینک زیر با یک روش ابتکاری این مورد رو توسط SQL Server حل کرده:

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

امید است به کار آید.

mmp30
30-01-2016, 16:26
سلام دوستان منم دنبال restore sql 2000 to sql 2014 هستم لطفا راهنمایی بفرمایید