View Full Version : سوال: چه تابعی در SQL کار تابع Dsum در Access رو انجام میده؟
Omid_Manam
پنج شنبه 26 فروردین 1389, 17:44 عصر
سلام دوستان سوال من اینه؟
توی اکسس تابعی داریم به نام Dsum که بوسیله اون میشه جمع تجمعی انجام داد.
حالا میخام بدونم توی SQL چه تابعی همچین کاری رو انجام میده؟
پیشاپیش سپاسگذارم
موفق باشید:لبخندساده:
محمد سلیم آبادی
شنبه 28 فروردین 1389, 21:27 عصر
سلام دوستان سوال من اینه؟
توی اکسس تابعی داریم به نام Dsum که بوسیله اون میشه جمع تجمعی انجام داد.
حالا میخام بدونم توی SQL چه تابعی همچین کاری رو انجام میده؟
پیشاپیش سپاسگذارم
موفق باشید:لبخندساده:
سلام،
همانطوری که در پست قبلی اشاره شد می تونید از تابع ()SUM استفاده کنید.
در MS Access آیا امکان استفاده از توابع تجمعی که در زبان استاندارد SQL وجود دارد نمی شود استفاده کرد؟
Omid_Manam
یک شنبه 29 فروردین 1389, 19:41 عصر
با سلام خدمت آقایون خوش فهم یا شایدم نفهم وقتی چیزی رو نمیدونین مثل 35 کاربر دیگه بخونید حرف نزنید و تشریفتون رو ببرید.
برای بدست آوردن مانده حساب به شکل زیر که بهش میگین جمع تجمعی از DSUM استفاده میکنن
بدهکار**** بستانکار *****مانده حساب
2000 ***** ************** 2000
**********1000***********1000
3000*********************4000
توی اکسس با تابع DSUM به شکل زیر میشه ستون مانده حساب رو در آورد حالا من متابق این تابع در SQL رو میخام
DataMaster
یک شنبه 29 فروردین 1389, 20:05 عصر
با سلام خدمت آقایون خوش فهم یا شایدم نفهم وقتی چیزی رو نمیدونین مثل 35 کاربر دیگه بخونید حرف نزنید و تشریفتون رو ببرید.
برای بدست آوردن مانده حساب به شکل زیر که بهش میگین جمع تجمعی از DSUM استفاده میکنن
بدهکار**** بستانکار *****مانده حساب
2000 ***** ************** 2000
**********1000***********1000
3000*********************4000
توی اکسس با تابع DSUM به شکل زیر میشه ستون مانده حساب رو در آورد حالا من متابق این تابع در SQL رو میخام
عزيز دل برادر از همون اول بگين چي لازم دارين تا اشتباهي راهنمايي نكنن
توي SQL همچين تابعي نداريم خودتون بايد يه جوري فراهمش كنيد، معمولا اين جور چيزا طرف اپليكيشن هم ميتوني درستش كني
البته دوستان قبلا راه حل هايي هم ارائه كرن ولي من نتونستم پيدا كنم
محمد سلیم آبادی
یک شنبه 29 فروردین 1389, 20:07 عصر
با سلام خدمت آقایون خوش فهم یا شایدم نفهم وقتی چیزی رو نمیدونین مثل 35 کاربر دیگه بخونید حرف نزنید و تشریفتون رو ببرید.
برای بدست آوردن مانده حساب به شکل زیر که بهش میگین جمع تجمعی از DSUM استفاده میکنن
بدهکار**** بستانکار *****مانده حساب
2000 ***** ************** 2000
**********1000***********1000
3000*********************4000
توی اکسس با تابع DSUM به شکل زیر میشه ستون مانده حساب رو در آورد حالا من متابق این تابع در SQL رو میخام
سلام،
می تونید بدون اینکه به دیگران توهین کنید، مشکلتون رو توضیح بدین. وقتی که داخل تالار SQL Server دارین فعالیت می کنید باید این رو در نظر بگیرین که ممکنه افراد با Access هیچ آشنایی نداشته باشند تا بفهمند منظورتون از DSUM چیه!
هر کسی که با زبان SQL آشنا باشه با دیدن کلمه "جمع تجمعی" بی شک یاد ()SUM می افتد.
اگر خواسته ی شما رو کامل متوجه شده باشم، بهش می گند running total. که متاسفانه در SQL Server تابعی که کار DSUM را انجام بده وجود ندارد.می تونم Query مورد نظر را ایجاد کنم.
محمد سلیم آبادی
دوشنبه 30 فروردین 1389, 01:08 صبح
میشه کوئری را بگذارید
در جدول بایستی ستونی وجود داشته باشه که AutoNumber بوده و به هر سطر یک شماره ی ردیف بده سپس کوئری به این شکل در میاد:
SELECT *, (SELECT SUM(Talab) - SUM(Bedehi)
FROM table_name AS T1
WHERE T1.ID <= T2.ID) AS DSUM
FROM table_name AS T2
zmmehrdad
دوشنبه 30 فروردین 1389, 17:23 عصر
در جدول بایستی ستونی وجود داشته باشه که AutoNumber بوده و به هر سطر یک شماره ی ردیف بده سپس کوئری به این شکل در میاد:
SELECT *, (SELECT SUM(Talab) - SUM(Bedehi)
FROM table_name AS T1
WHERE T1.ID <= T2.ID) AS DSUM
FROM table_name AS T2
دستور زیبا بود ولی یک سوال ؟
performance این دستور پایین نیست یا اینکه optimizer خودش می فهمه چیکار کنه ؟
بهتر نیست از stored procedure و cursor و memory table استفاده کنه ؟
محمد سلیم آبادی
دوشنبه 30 فروردین 1389, 19:54 عصر
دستور زیبا بود ولی یک سوال ؟
performance این دستور پایین نیست یا اینکه optimizer خودش می فهمه چیکار کنه ؟
بهتر نیست از stored procedure و cursor و memory table استفاده کنه ؟
بله، عملکرد پایینی دارد. Optimizer می تواند بهترین Plan و ایندکس ها را شناسایی کند، ولی وقتی خود فرم کوئری مشکل دارد کاری نمی شود کرد.
در کل از Subquery در ماده ی SELECT نبایستی استفاده کرد. به طور مثال اگر کوئری اصلی 100 سطر را برگرداند بایستی کوئری یا کوئری هایی که در SELECT نوشته شده اند به تعداد سطرها اجرا شوند، که در مثال ما 100 بار یک کوئری اجرا می شود، یعنی با اجرای یک کوئری ما 100 کوئری دیگر را اجرا کرده ایم. و این می تواند واقعا اثر منفی روی عملکرد کوئری بگذارد.
راجب Cursor که قبلا صحبت کرده ام، استفاده از کرسر بطور جدی نحی میشود. (اتفاقا تاپیکی در این مورد در این تالار وجود دارد)
در مورد memory table (جدول حافظه؟) چیزی نشنیده ام.
zmmehrdad
دوشنبه 30 فروردین 1389, 22:16 عصر
بله، عملکرد پایینی دارد. Optimizer می تواند بهترین Plan و ایندکس ها را شناسایی کند، ولی وقتی خود فرم کوئری مشکل دارد کاری نمی شود کرد.
در کل از Subquery در ماده ی SELECT نبایستی استفاده کرد. به طور مثال اگر کوئری اصلی 100 سطر را برگرداند بایستی کوئری یا کوئری هایی که در SELECT نوشته شده اند به تعداد سطرها اجرا شوند، که در مثال ما 100 بار یک کوئری اجرا می شود، یعنی با اجرای یک کوئری ما 100 کوئری دیگر را اجرا کرده ایم. و این می تواند واقعا اثر منفی روی عملکرد کوئری بگذارد.
راجب Cursor که قبلا صحبت کرده ام، استفاده از کرسر بطور جدی نحی میشود. (اتفاقا تاپیکی در این مورد در این تالار وجود دارد)
در مورد memory table (جدول حافظه؟) چیزی نشنیده ام.
منظورم از memory table همون table data type یا temporary table هست
جسارتا لینک زیر را ضمیمه می کنم
http://msdn.microsoft.com/en-us/library/ms175010.aspx
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.