View Full Version : Group by با محدودیت روی فیلدهای دیگر
p_plusplus
دوشنبه 18 مهر 1384, 14:10 عصر
بسم ا...
با سلام و خسته نباشید.
من می خوام که یه کوئری به شکل زیر داشته باشم:
Select S.ID,Sum(S.cost),R.MyDate
from S as table1,R as table2
Group by ID
where S.ID=R.ID and myDate<=D2 and myDate>=D2
مشکل من اینه که می خوام گروپ بای فقط روی یه فیلد استفاده بشه و فیلد تاریخ بدون اینکه در گروپ بای شرکت کنه در شرط ور به عنوان محدودیت اعمال بشه و توی ستونهای سلکتمم بیاد.
تو رو خدا هر کی راهی به ذهنش می رسه بگه.
ممنون.
Achchan
دوشنبه 18 مهر 1384, 16:04 عصر
Select S.ID,Sum(S.cost),R.MyDate
from S as table1,R as table2
Group by ID
where S.ID=R.ID and myDate<=D2 and myDate>=D2
Hi,some questions:
1. What are those aliiase for? you set alias for S and R but never used them.maybe you meant:
table1 as S,table2 as R
2.The syntax is wrong due to preceding group by before where clause.
3.This is a simple join.I recommand using ANSI-92 compatible syntax as:
S inner join R on S.ID = R.ID for that purpose.
4.
myDate<=D2 and myDate>=D2
Do you mean MyDate = D2? Does D2 hard coded or is a bind variable or...?
5.A hint for all seasons: Send your DDL to create your test scenario so we can reply you more consciously !
I think main problem (Ya,this is very frequent on forums! ) is how to select anothre not-in-group by column (here R.MyDate) among the other columns.
I am looking for your DDLs and then...
-Best wishes and feel free to mail me: baronc_rampantc@yahoo.ca
titbasoft
دوشنبه 18 مهر 1384, 23:40 عصر
کاری که شما می خواهید انجام بدید مشکل منطقی داره ! بالاخره توی اون بازه ای که داره قیمت ها جمع بسته میشه بیش از یک تاریخ وجود داره ، حالا انتظار دارید کدومش رو ببینید؟
AminSobati
سه شنبه 19 مهر 1384, 12:38 عصر
همونطور که در پستهای قبلی اشاره شد بهتره از استاندارد ANSI برای انجام Join استفاده بشه. Query شما از نظر Syntax اشکال داره. در حقیقت چیزی که مد نظرتون هست اینه:
Select table1.ID,Sum(table1.cost),table2.MyDate
from table1
inner join table2
on table1.ID=table2.ID
where myDate<=D2 and myDate>=D2
Group by ID
ولی table2.MyDate که در Group By شرکت نداره، باعث بروز اشکال خواهد شد بر طبق این قائده:
تمام فیلدهایی که در قسمت Select قید شده اند ولی در Aggregation شرکت ندارند، میبایست در Group By حضور داشته باشند.
صرف نظر از این قائده، از نظر منطق هم (که دوستان اشاره کردند) این کار با اشکال مواجه هست. شما Cost رو برای IDهای زیادی جمع میزنید و در نهایت یک عدد برای هر ID بدست میارید. حالا کدوم تاریخ رو برای مجموع قصد دارید نمایش بدین؟
نزدیکترین Query به هدف شما شاید چنین چیزی باشه (تست نکردم):
select tmp.*, table2.MyDate from
(Select table1.ID,Sum(table1.cost)
from table1
inner join table2
on table1.ID=table2.ID
where myDate<=D2 and myDate>=D2
Group by ID) tmp
join table2
on tmp.ID=table2.ID
p_plusplus
سه شنبه 19 مهر 1384, 21:59 عصر
بسم ا...
سلام.
ممنون. منظور منم دقیقا" همین بود. ببینید اصل قضیه از این قراره که من می خوام توی یه برنامه حسابداری دفتر کل یا معین تهیه کنم که شامل کد سرفصل ، جمع مبالغ بستانکاری و بدهکاری سندها بر اساس اون سرفصل ها و تاریخ اسناد می باشد. (جدول سرفصل ها و جدول اسناد دو تا جدول مختلف هستن.) حالا می خوام پارامترهای من محدوده سرفصل ها و محدوده تاریخ اسناد باشه. یعنی می خوام سرجمع حساب هر سرفصل رو از توی جدول اسناد بیرون بکشم و این کارو فقط روی اسنادی انجام بدم که توی اون محدوده تاریخ تعیین شده باشن. مثلا" می خوام سرجمع مبالغ اسنادی که دارای کد سرفصل "بانکها" (تا سرفصل مثلا" "بدهکاران") می باشند و از تاریخ 01/01/1383 تا 01/01/1384 صادر شده اند را نمایش دهم.
برای محاسبه سرجمع یه کرسر نوشتم اما توی استفاده از یه فیلد بدون شرکت در گروپ بای و تابع اگریگیت موندم. (در واقع به میون اومدن این تاریخه کار منو خراب کرده.)
می خواستم با یه مثال ساده منظورمو بیان کنم که کلی غلط پلوط از توش در اومد!
به هر حال از راهنمائیتون ممنون. میرم با نمونه کدی که پیشنهاد دادین کلنجار برم ببینم مشکلم حل میشه یا نه؟
متشکرم.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.