View Full Version : محاسبه حقوق بر حسب سال كاركرد
mohsenm66
شنبه 22 خرداد 1389, 12:47 عصر
من در برنامه ام 2 نرخ محاسبه دستمزد دارم :
نرخ 1 = براي افراد با سابقه كار كمتر از 10 سال
نرخ 2 = براي افراد با سابقه بالاي 10 سال
همچنين سال شروع كار را هم در جدول مشخصات افراد ذخيره مي كنم .
حال براي محاسبه فيش حقوقي به مشكل برخورد كرده ام .
بايد براي افراد كمتر از 10 سال نرخ 1 را حساب كنم و براي بقيه نرخ 2 را حساب كنم ولي در نوشتن sql آن به مشكل برخورد كرده ام .
لطفا مرا در نوشتن اين sql ياري كنيد . :گیج::عصبانی++:
محمد سلیم آبادی
شنبه 22 خرداد 1389, 13:08 عصر
اطلاعات مربوط به نرخ در جدول ذخیره شدند یا در یک متغیر ؟
برای ذخیره تاریخ از چه نوعی استفاده کردین، DateTime ؟
mohsenm66
شنبه 22 خرداد 1389, 13:22 عصر
اطلاعات مربوط به نرخ در جدول ذخیره شدند یا در یک متغیر ؟
برای ذخیره تاریخ از چه نوعی استفاده کردین، DateTime ؟
اطلاعات مربوط به نرخ در يه جدول به نام نرخ ذخيره شده و فيلد هاي آن از نوع عددي مي باشند و براي تاريخ هم من فقط سال شروع به كار را در يك فيلد عددي ذخيره كرده ام .
محمد سلیم آبادی
شنبه 22 خرداد 1389, 13:29 عصر
می تونید یک نمونه از داده های جدول نرخ را پست کنید؟
mohsenm66
شنبه 22 خرداد 1389, 19:55 عصر
t_code كد
t_nimsal شماره نيمسال (اول - دوم )
T_madrak كد مدرك تحصيلي
T_mablagh1 نرخ تعرفه 1
t_mablagh2 نرخ تعرفه 2
mohsenm66
شنبه 22 خرداد 1389, 20:16 عصر
من يه فرمول مشابه متن زير مي خواهم :
اگر سابقه > 10 سال محاسبه تعرفه با نرخ 1 در غير اين صورت محاسبه تعرفه با نرخ 2
IF sabegh>10 then
saat_karkard*mablagh2
else
saat_karkard*mablagh1
end if
حالا من بايد اينو با sql پياده سازي كنم چطوري ؟
محمد سلیم آبادی
شنبه 22 خرداد 1389, 20:31 عصر
یک چیزی شبیه به این باید بشه:
savabegh را از تفاضل سال استخدام و سال جاری بدست آوردم و نرخ حقوق هر فرد را بر اساس کد مدرک از جدول نرخها بدست آوردم.
چون به داده های جدول آشنا نیستم یک کوئری به شکل کاملا حدسی نوشتم. امتحانش کنید و در صورت جواب ندادن لطفا یک نمونه از داده های جدول اول هم نمایش بدین. مثلا سوابق در کدام جدول ذخیره شدن. کد مدرک آیا در جدول کارمندان وجود داره، نام ستونی که مشخص کننده سال استخدام کارمند است چه نام دارد....
SELECT E.*,
CASE WHEN T.nimsal/10 - E.nimsal/10 > 10 THEN T.T_mablagh2
ELSE T.T_mablagh1
END * saat_karkard
FROM employees E
JOIN tarefe T
ON T.T_madrak = E.madrak
AND T.nimsal = 882;
mariaviolla
شنبه 22 خرداد 1389, 20:47 عصر
یک چیزی شبیه به این باید بشه:
savabegh را از تفاضل سال استخدام و سال جاری بدست آوردم و نرخ حقوق هر فرد را بر اساس کد مدرک از جدول نرخها بدست آوردم.
چون به داده های جدول آشنا نیستم یک کوئری به شکل کاملا حدسی نوشتم. امتحانش کنید و در صورت جواب ندادن لطفا یک نمونه از داده های جدول اول هم نمایش بدین. مثلا سوابق در کدام جدول ذخیره شدن. کد مدرک آیا در جدول کارمندان وجود داره، نام ستونی که مشخص کننده سال استخدام کارمند است چه نام دارد....
SELECT E.*,
CASE WHEN T.nimsal/10 - E.nimsal/10 > 10 THEN T.T_mablagh2
ELSE T.T_mablagh1
END * saat_karkard
FROM employees E
JOIN tarefe T
ON T.T_madrak = E.madrak
AND T.nimsal = 882;
می شه این کوئری رو واضح تر توضیح بدیدپپپ/
ممنونم
محمد سلیم آبادی
یک شنبه 23 خرداد 1389, 12:45 عصر
می شه این کوئری رو واضح تر توضیح بدیدپپپ/
ممنونم
سلام،
کوئری کار خاصی انجام نمی دهد. فقط نکته ای که وجود داره استفاده از عبارت CASE در ماده ی SELECT هست که برای پیاده سازی شرط مورد نظر کاربر استفاده شده.
در جدول دوم کاربر دو ستون برای حقوق وجود دارد یکی برای افراد با سابقه ی بیش از 10 سال و دیگری برای کمتر از 10 سال، حالا ابتدا باید سابقه را با عدد 10 مقایسه کرد اگر بیش از 10 سال بود از مقدار ستون مورد نظر استفاده میشه....
mohsenm66
دوشنبه 24 خرداد 1389, 11:56 صبح
حالا يه سوال
من در جدول كارمندان سال استخدام را ذخيره كرده ام و ميخواهم تاريخ جاري از سال استخدام كم شود و سابقه كار به دست آيد . چگونه ميتونم تاريخ جاري را به صورت يك پارامتر از برنامه ام به sql بفرستم و اصلا چگونه مي توانم در sql تاريخ جاري را به صورت پارامتر دريافت كنم .
محمد سلیم آبادی
دوشنبه 24 خرداد 1389, 14:26 عصر
حالا يه سوال
من در جدول كارمندان سال استخدام را ذخيره كرده ام و ميخواهم تاريخ جاري از سال استخدام كم شود و سابقه كار به دست آيد . چگونه ميتونم تاريخ جاري را به صورت يك پارامتر از برنامه ام به sql بفرستم و اصلا چگونه مي توانم در sql تاريخ جاري را به صورت پارامتر دريافت كنم .
تابع getdate تاریخ و زمان فعلی سیستم را بر میگردونه ولی میلادی هست ( باید تبدیل به شمسی بشه، باید براش راه حل پیدا کنید) و با کمک تابع year سال تاریخ فعلی را برمی گردوندید.
بهتر هست از sp برای اجرا کردن query هایتان استفاده کنید. sp میتواند پارامتر برایش تعریف شود و توسط برنامه به آن ارسال شود.
mohsenm66
دوشنبه 24 خرداد 1389, 20:16 عصر
من راجع به sp چيزي نميدونم اگر امكان داره يكم بيشتر توضيح بدهيد .
mohsenm66
دوشنبه 24 خرداد 1389, 20:37 عصر
من تاريخ را در برنامه ام از تاريخ جاري سيستم بدست مي آوردم و تبديل به تاريخ شمسي مي كنم و ميخواهم از داخل برنامه تاريخ را به query مربوطه ارسال كنم .
حالا بايد در نوشتن sql مربوطه از پارامتر استفاده كنم. چطوري ؟
محمد سلیم آبادی
دوشنبه 24 خرداد 1389, 23:12 عصر
من تاريخ را در برنامه ام از تاريخ جاري سيستم بدست مي آوردم و تبديل به تاريخ شمسي مي كنم و ميخواهم از داخل برنامه تاريخ را به query مربوطه ارسال كنم .
حالا بايد در نوشتن sql مربوطه از پارامتر استفاده كنم. چطوري ؟
لطفا به syntax مربوط به SP در book Online رجوع کنید (با کمک جستجو در google)
syntax ساده شده ی مربوط به یک SP به شکل زیر هست:
create proc proc_name (@param1 dataType) as
select case when @param1 > 10 then ...
from ...;
mohsenm66
سه شنبه 25 خرداد 1389, 11:38 صبح
create proc proc_name (@param1 dataType) as
select case when @param1 > 10 then ...
from ...;
ميشه در مورد كد بالا بيشتر توضيح بدي ؟
اين كد را در كجا بايد بنويسم ؟
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.