PDA

View Full Version : سوال: یکی کردن چند کوئری محاسباتی



aradeonas
پنج شنبه 13 آبان 1389, 11:58 صبح
سلم
دوستان من یک نمونه گذاشتم که می خوام به نتیجه کوئری q1111 برسم اما می خوام ببینم که چطوری می توان این مراحل را یکی کرد و این تعداد کوئری ها رو نساخت.
مثالی که ساختم کاملا واضح است و نشون می ده که دقیقا چی می خوام
متشکرم.

Sk1900n3
پنج شنبه 13 آبان 1389, 12:57 عصر
میشه منظورتون رو بهتر بگید

aradeonas
جمعه 14 آبان 1389, 01:26 صبح
فکر می کردم واضح باشه ولی چشم:
من می خوام مجموع موجودی کل حساب ها رو بدست بیارم.
برای این کار یکبار تمام دریافتی هایی که شرط 1<> رو دارن رو جدا می کنمو یکبار با هم جمعشون می کنم و یکبار هم اونها رو با موجودی اولیه حساب ها جمع می کنم و ددر آخر حاصل کل همه رو با یک جمع دیگه بدست می آرم.
و سوال من اینجاست که چگونه می تونم این مراحل رو کمتر کنم و اونها رو در کوئری های کمتری به اجرا بگذارم؟
با تشکر

id1385
جمعه 14 آبان 1389, 02:13 صبح
با سلام [پیشنهاد یه مبتدی]

در یک جدول اطلاعات حسابهاتو داشته باش و برای هر حساب یا هر صندوق و یا تنخواهی یک شماره مخصوص
مثلاً : کد:MAIN نام : صندوق اصلی --- تاریخ افتتاح : 1389/08/14 --- متصدی : وفا

حالا تو یه جدول دیگه تاریخ - شرح - دریافت - پرداخت وقتی پولی به یکی از حسابهات وارد می شه مثلاً به صندوق اصلیت 10.000.000 ریال پول میدی پس اون صندوق بدهکار می شه و بر فرض موجودی صفر اولیت موجودی الان صندوقت -10.000.000 ریال هست - یعنی اول موجودی فعلی صندوقت رو درمیاری مثلاً درآوردی 0 تومان است حالا اونو بدهکار می کنی به این صورت که به موجودیش اضافه می کنی و مثلاً از مشتری x گرفتی اونو بستانکار می کنی که در این صورت کد زیر رو برای صندوقت می زنی
DIM MOJODI,newmoj as LONG
Mojodi =(0) newmoj=mojoodi+10.000.000
UPDATE CACH SET CACH.[INT] = newmoj; 2)

می یایی از اون 10.000.000 ریال مثلاً به امینی بابت حقوق و دستمزد مقداری پول می دی مثلاً 4.000.000 ریال خب الان صندوقت بستانکار می شه یعنی باید از موجودیش کم بشه مثل قبل می زنی حالا میشه 10.000.000-4.000.000 که باید حالا مثل قبل کد بنویسی و از موجودی عدد مورد نظر رو کم کنی و حالا نتیجه رو دوباره به فیلد موجودی اضافه کنی به این صورت هر چندتا که خواستی می تونی حساب داشته باشی با مانده برای اینکه هم بتونی مانده کل حسابها رو داشته باشی راههای زیادی وجود داره مثل حلقه ها یا جمع در پایین صفحات و ...

البته این مبتدیانه است ولی یادت نره که فقط این نیست باید حتما" جدول دیگه هم داشته باشی که ستون بدهکار بستانکار داشته باشه.
نمونه توضیح بالا
http://www.mytabligh.com/acpi/8.PNG


http://www.barnamenevis.org/forum/showthread.php?t=221938





موفق باشید

aradeonas
یک شنبه 16 آبان 1389, 10:25 صبح
دوست عزیز یا من متوجه منظور شما نشدم و یا شما متوجه منظور من.
من با آنالیز جدول ها مشکلی ندارم،من این نمونه رو گذاشتم با چند کوئری و پرسیدم که چطوری میشه تعداد این کوئری ها رو از اینی که هست کمتر کنم؟
نتیجه ای که من می خوام لازم به انجام چند فرآیند است که مجبورم چند کوئری بسازم و هر یک،یک کار را انجام دهد،حالا می خوام ببینم میشه این چند کار رو در یک کوئری اجرا کرد؟

aradeonas
سه شنبه 18 آبان 1389, 01:12 صبح
کسی از دوستان جوابی برای این سوا نداره یا این سوال اشتباه مطرح شده؟

aradeonas
چهارشنبه 19 آبان 1389, 18:52 عصر
یعنی من باید برای یک نتیجه گیری تقریبا ساده چند تا کوئری بسازم؟

Zero Defect
پنج شنبه 20 آبان 1389, 09:06 صبح
سلام


یعنی من باید برای یک نتیجه گیری تقریبا ساده چند تا کوئری بسازم؟

هم بله و هم خیر !

با توجه به سطح استخراج اطلاعات گاها شما ناگزیر به اجرای کار در چند مرحله اید , همچون نمونه شما

ولیکن همین نمونه هم در مثال پیش رو , در یک قدم ساده تر دیگه با دو Query هم قابل اعمال هستش که در ادامه ضمیمه شده

ولیکن یک توضیح کلی که قصد باز کردن اون رو ندارم و در صورتی که علاقه مند بودید خودتون به دنبال اون میتونید برید مبحث SubQuery هستش

توانمند ترین تکنیک پرس و جوها که همین نمونه شما رو هم در قالب یک Query به انجام میرسونه ( و نمونه های بسیار پیچیده تر )

یادگیری اون مستلزم اینه که شما تسلط کاملی بر ساخت خود پرس و جوهای استاندارد داشته باشید وگرنه راه سخت و پرخطایی رو در پیش خواهید داشت توصیه میشه یادگیری اون رو در برنامه های آتی خودتون قرار بدید ( شاید در حال حاضر خیلی زود باشه )

توضیح : داده های جداول رو برای سهولت بررسی صحت عملکرد تغییر دادم تا بتونم تریس رو انجام بدم

Query2 و Query2_2 رو ملاحظه کنید

موفق باشید