View Full Version : کنک برای نوشتن یک کوئری ساده
na3er-faraji
چهارشنبه 05 مرداد 1390, 09:53 صبح
سلام
یه جدول دارم که توش دو تا ستون داره
شماره ستون
بدهکار
میخام یه select بنویسم که جمع بدهکارهای شماره ستون های مشابه رو برگردونه!!!
یوسف زالی
چهارشنبه 05 مرداد 1390, 10:52 صبح
سلام.
select Sotun, sum(BD) from TBL
group by Sotun
به همین راحتی
na3er-faraji
چهارشنبه 05 مرداد 1390, 11:11 صبح
یعنی خودش ستون های تکراری رو حذف مبکنه؟؟؟
na3er-faraji
چهارشنبه 05 مرداد 1390, 11:19 صبح
SELECT ShomareSanad, Date, KodeHesabeKol, Name, Bedehkar, SUM(Bestankar) AS Expr1
FROM (SELECT SanadTBL.ShomareSanad, SanadTBL.Date, CONVERT(Char(1), SatreSanadTBL.GroupId) + ' _ ' + CONVERT(nvarchar(20), SatreSanadTBL.KolId)
AS KodeHesabeKol, KolTBL.Name, SatreSanadTBL.Bedehkar, SatreSanadTBL.Bestankar
FROM KolTBL INNER JOIN
SatreSanadTBL ON KolTBL.KolId = SatreSanadTBL.KolId CROSS JOIN
SanadTBL) AS derivedtbl_1
GROUP BY ShomareSanad
دستور من در نهایت به اینجا باید ختم بشه . یه select گرفتم که یه خروجی داره و از این select یه select دیگه گرفتم. مشکل چیه که خروجی نمیده؟؟؟
یوسف زالی
چهارشنبه 05 مرداد 1390, 11:25 صبح
اشکال در group by هست.
تکلیف اینها روشن نیست:
ShomareSanad, Date, KodeHesabeKol, Name, Bedehkar
برای ردیفهایی که ShomareSanad یکسان دارند اگر همه اینها یکی هستند اینها را در group by اضافه کنید.
na3er-faraji
چهارشنبه 05 مرداد 1390, 11:33 صبح
شرمنده من یه کم گیچ شدم. مگه کار group by گروه بندی نیست. نمیفهمم اینجا دقیقا کارش چیه؟؟؟ میشه یه کم منو روشن کنید!!!
na3er-faraji
چهارشنبه 05 مرداد 1390, 11:34 صبح
مگه ما نمیخایم جمع بدهکارها . بستانکار ها رو بر اساس شماره سندهای یکسان بدست بیارم؟؟؟ اون وقت فیلد name , date این وسط چیکاره ان؟؟؟
یوسف زالی
چهارشنبه 05 مرداد 1390, 11:55 صبح
ببینید وقتی میگیم گروه بندی کنه مثلا بر اساس شماره سند، سیستم که نمی دونه مثلا هر شماره ای فقط یک تاریخ داره و نمی فهمه که از کدوم ردیف تاریخ رو بیاره.
وقتی می گی تاریخ رو هم در گروه بیار ، می ره و گروه بندی رو به تفکیک هردو میاره که اگر هر سندی فقط یک تاریخ داره نتیجه شما حاصل میشه.
به طور کلی اگر گروه بندی دارید فیلد هایی که در سلکت نوشته میشن:
یا باید aggregate باشن مثل sum, count, max
یا باید گروه بندی بر اساس اونا باشه
یا یک مقدار مشخص باشن مثل 10
اینجا گروه بندی بر اساس شماره هست اما تاریخ نه در گروه اومده نه aggregate داره و نه داده صریح هست.(چون فیلد هست)
na3er-faraji
چهارشنبه 05 مرداد 1390, 12:05 عصر
ممنون از جواب کاملتون.
من میخام تاریخ در خروجی هم باشه اما گروه بندی روش اعمال نشه. وفتی تاریخ رو در گروه بندی میارم دیگه جمع بدهکارها و بستانکارها رو درست بهم نمیده. اما وقتی تاریخ رو حذف میکنم جواب درست میشه(اما من دیگه تو خروجیم تاریخ رو ندارم). به نظرتون چیکا باید بکنم؟؟؟
یوسف زالی
چهارشنبه 05 مرداد 1390, 20:11 عصر
خواهش می کنم .
ببینید شما اگر در اسناد مشابه تاریخ های غیر یکسان دارید مجبورید یکی از این راهها رو انتخاب کنید:
1- اسناد رو جدا جدا نمایش بدید (با گروه بندی کردن تاریخ)
2- یکی از تاریخ ها رو انتخاب کنید(مثلا به جای Date در Select بنویسید Max(Date) که اونوقت میره برای یک شماره سند آخرین تاریخ رو میاره)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.