PDA

View Full Version : جمع حقوق با یک شماره چک



emdadgar_shahed
یک شنبه 21 شهریور 1389, 00:16 صبح
********** کمک فوری ************
سلام
این فرم ارسالی به بانک هست که بر اساس شماره چک فراخوانی میشه
حقوق مربیان این دوره ها بر اساس شماره چک واریزی به بانک فراخوانی میشه .
چطور میتونم به جای تکرار چند بار نام این مربیان ، فقط یک بار نامشان را نشان دهد و جلوی آنها جمع حقوق واریزی آنها نمایش داده شود .
کدی که من بکار بردم اینه ولی خروجی با تکرار نمایش داده میشه !!!!


SQL.Add('Select DISTINCT T1.*,T2.*,T3.*,T4.*,T5.*,T6.*,(select sum(pprice) from hoghoogh where codem=ucodem) as dd1'
+' from uprop T1,dprop T2,uproph T3,hoghoogh T4,paye T5,bankname T6 where (T4.pcheck=:a) and (T3.ucodemh=T1.ucodem) and (T4.coded=T2.coded) and (T4.codem=T1.ucodem)'
فراخوانی متعدد بعضی داده ها برای خروجی گرفتن در چاپ هست .
اینم شکل فرم فعلی که در خروجی چاپ نمایش میده .
ممنون

hossein_h62
یک شنبه 21 شهریور 1389, 07:44 صبح
سلام یه Group By بزن بر اساس کد مربیان یا شماره حساب مربیان تا سرجمع حقوق هر مربی نمایش داده بشه.
شکل کلی دستور به این صورت هست :




SELECT Employee, SUM (price)
FROM EmployeeHours
GROUP BY Employee

emdadgar_shahed
یک شنبه 21 شهریور 1389, 15:40 عصر
بعد از نوشتن خط فرمان و اجرای برنامه با ورود اطلاعات و فشردن کلید پرینت این اررو نمایش داده میشه .


SQL.Add('Select codem,sum(pprice),pcheck'
+' from hoghoogh where pcheck=:a'
+' GROUP BY codem');

hossein_h62
یک شنبه 21 شهریور 1389, 16:27 عصر
به این صورت :




Select codem,sum(pprice) as sumpprice,pcheck
from hoghoogh where pcheck = a
GROUP BY codem

emdadgar_shahed
یک شنبه 21 شهریور 1389, 18:10 عصر
عجیبه باز هم همون پیغام خطا را نشون میده !!!!
واقعاً کلافه ام کرده ...
اگه ممکنه یه نمونه فایل بذارید تا دلفی را چک کنم . شاید ایراد از دلفی باشه .
اونو ریپیر هم کردم ولی باز هم پیغام را نشون میده
البته با حذف کردن GROUP BY بعضی مواقع پیغام خطا حذف میشه ولی افراد تکراری را بازهم نشون میده !!!!

hossein_h62
یک شنبه 21 شهریور 1389, 21:32 عصر
عجیبه باز هم همون پیغام خطا را نشون میده !!!!
دوست عزیز شکل کلی دستور درسته.
بانکتون چی هست ؟؟
اگه ممکنه همین قسمت برنامتون رو بزارید تا اشکال مشخص بشه.

emdadgar_shahed
یک شنبه 21 شهریور 1389, 23:57 عصر
این یه قسمت از برنامم هست
البته باید فست ریپورت نصب باشه چون خروجی من در فست ریپورت انجام میشه .

Mahmood_M
دوشنبه 22 شهریور 1389, 02:02 صبح
مشکل دستور SQL شما اینه که تمام فیلدهایی که در Select میارید رو بعد از Group By نمیارید ! ، درواقع وقتی از Group By به همراه یک Aggregate Function مثل Sum استفاده می کنید باید بعد از Group By تمام فیلدهایی که در Select قرار دادید رو به غیر از فیلدی که در تابع SUM قرار گرفته ، در Group By هم قرار بدید ، دستوری که خودتون نوشتید به صورت زیر هست :
Select T1.ufamily, T4.pcheck, SUM(T4.pprice) from uprop T1,hoghoogh T4 where (T4.pcheck=:a) and (T4.codem=T1.ucodem) GROUP BY ufamily
در قسمت Select فیلدهای ufamily و pcheck قرار داده شدن ولی در قسمت Group By فقط ufamily قرار داده شده ، گروه بندی باید توسط تمام فیلدهای دستور Select که در توابع استفاده نمی شن انجام بشه ...
دستور رو به صورت زیر تصحیح کنید :
Select T1.ufamily, T4.pcheck, SUM(T4.pprice) from uprop T1,hoghoogh T4 where (T4.pcheck=:a) and (T4.codem=T1.ucodem) GROUP BY ufamily, pcheck

نمونه ی تصحیح شده رو ضمیمه کردم ، البته وقتی با Fast Report خواستم نتیجه رو نمایش بدم FR یک Access Violation نمایش می داد که مربوط به دستور GetValue کامپوننت Fast Report در یونیت frxClass هست ، نسخه ای که من استفاده می کنم نسخه ی 4.8 هست ، شاید برای شما این مشکل رو نداشته باشه ، برای اطمینان یک DBGrid به برنامه اضافه کردم تا نتیجه رو داخل اون ببینید ...

موفق باشید ...

emdadgar_shahed
سه شنبه 23 شهریور 1389, 15:45 عصر
سلام
ممنون بابت پاسخی که دادید :قلب:
الان مجبور شدم یه فیلد دیگه از حقوق (تاریخ) را تو خروجی فراخوانی کنم .
با اضافه کردن این فیلد مجدد تکراری ها را هم نشون میده .

Select T1.ufamily, T4.pcheck,T4.pdate, SUM(T4.pprice) from uprop T1,hoghoogh T4 where (T4.pcheck=:a) and (T4.codem=T1.ucodem) GROUP BY ufamily, pcheck, pdate

مشکل چیه ؟

Mahmood_M
پنج شنبه 25 شهریور 1389, 04:17 صبح
مشکل چیه ؟
Group By به اینصورت عمل می کنه که فیلدهای تکراری رو یک بار نشون میده ! ، خوب وقتی دو تاریخ مختلف برای یک نام یا ... ثبت شده باید کدوم رو برای نمایش انتخاب کنه ؟!
در واقع دستور SQL شما به درستی انجام میشه ، اگر دقت کنید ، بدون Group By و با همون Select تعداد رکوردها میشه 26 تا ولی تعداد رکوردهای همون Select با Group By میشه 19 تا ، پس گروه بندی رکوردها انجام شده ولی مواردی که تاریخها یکی نیستند نمیشه یک تاریخ رو نمایش داد ، درواقع تمام فیلدهایی که بعد از Group By قرار داده میشن باید مقادیر یکسان داشته باشن ، Group By هم یکسان بودن رو برای همه فیلدهایی که بعد از اون قرار داده شده در نظر می گیره و اگر مقادیر متفاوتی برای هر فیلد پیدا کرد ، برای هر مقدار یک رکورد در نظر می گیره ...

اصلا استفاده از فیلدهایی مثل تاریخ یا ساعت یا ... که مقادیر متفاوتی می تونن داشته باشن ، برای گروه بندی صحیح نیست !

موفق باشید ...