22-09-18, 11:01 PM
الصفحات : 1 2
26-09-18, 02:38 AM
فى البدابة الجدول عبارة عن التالى
الراتب الاساسـي : 2290
تاريخ التعيين : 1995
تاريخ استحقاق اخر العلـاوة : 2018
نسبة العـلاوة : 0.0125
اجمالي العـلاوة : 757.34
الاجمالى عبارة عن التالى
1- نسبة العلاوة وهى القيمة +1 لتصبح [ 1 + 0.0125 ] = 1.0125 .
2- عدد السنوات وهلى هبارة عن [ 2018 - 1995 ] = 23 .
3- قيمة المرتب وهو 2290 .
ليتم عمل المعدلة التالية بهذا الشكل النهائي
((1.0125^23)-1)*2290
هيكون الناتج عبارة عن 757.3421288
سيتم عمل تقريب اقرب رقم عشري 2 ليصبح الناتج 757.34
طيب الشكل الكلى لكود الاستعلام سيكون كالتالى
كود :
SELECT Salary, DateStart, DateEnd, Premium, (round(((val(val(1 + Premium) ^ round(val(DateEnd - DateStart)/(30*12),0) )-1) * Salary), 2)) AS Total FROM Test
مرفق مثال بسيط لقاعدة البيانات
تم عمل قاعدة البيانات بـ Access ستقوم بتطبيق المثال على Sql
بنفس الكود الاستعلام بدون اى اختلاف
تم عمل المثال المرفق بـ Access حتى توضح الفكرة
صورة لشكل الناتج بعد تنفيذ كود الاستعلام
مع العلم ان الجدول الرئيسي يحتوى فقط على كل من اول 4 اعمدة فقط
تحياتى لك
وتمنياتى لك التوفيق
26-09-18, 07:30 PM
كلمة شكر قليلة بحقك بارك الله فيك اخي الكريم
وجزاك الله كل خير
السلام عليكم
اخي الكريم طبقت الكود على sql server
اعطاني الخطأ التالية
Msg 195, Level 15, State 10, Line 2
'val' is not a recognized built-in function name.
وجزاك الله كل خير
السلام عليكم
اخي الكريم طبقت الكود على sql server
اعطاني الخطأ التالية
Msg 195, Level 15, State 10, Line 2
'val' is not a recognized built-in function name.
26-09-18, 08:01 PM
Val هي Function تخص قواعد بيانات MS Access
ولا يوجد ما يقابلها في قواعد بيانات SQL Server
ولا يوجد ما يقابلها في قواعد بيانات SQL Server
26-09-18, 08:18 PM
اشكرك اخي [b]عبدالله الدوسري وبارك الله فيك [/b]
26-09-18, 08:34 PM
مرحباً اخى sharawee707
فقط قم بحذف اى كلمة تحت اسم ( الكلمة فقط )
كود :
val
أو قم باستخدام الكود بهذا الشكل
كود :
SELECT Salary, DateStart, DateEnd, Premium, (round(((convert(int,convert(int,1 + Premium) ^ round(convert(int, DateEnd - DateStart)/(30*12),0) )-1) * Salary), 2)) AS Total FROM Test
لا يلزم استخدام كلاً من Val و Convert
كل الامر فقط توضيح فى المثال لتجنب اى خلل فى القيم للمثال
خصوصاً لان الامر بقاعدة بيانات Access قد يقوم باستخدام + كما لو انها &
ليصبح 1+1 = 11 بدلاً من 2 ولهذا تم استخدامه فى المثال فقط
فقط اتبع الخطوات كما تم شرحه فى الاعلى
اذا كنت ستقوم بحذف اى كلمة تحت اسم val
أو انك تقمو باستبدالها بكلمة Convert كما موضح فى الكود كاملاً
واسف لعدم توضح على امل انك ستكون على علم الفرق بين
Access و Sql Server
تحياتى لك
وتمنياتى لك التوفيق
26-09-18, 09:25 PM
بارك الله فيك واشكرك اخي الكريم على هذه المعلومة القيمة
كل الاحترام التقدير
كل الاحترام التقدير
27-09-18, 12:33 AM
الشكر لله والحمد لله
والحمد لله على كل حال
تحياتى لك
وتمنياتى لك التوفيق
23-10-18, 06:34 AM
السلام عليكم
اخي الكريم بعد تجربة المثال لا تظهر النتائج الصحيحة في sql server بعكس الاكسيس
اخي الكريم بعد تجربة المثال لا تظهر النتائج الصحيحة في sql server بعكس الاكسيس
23-10-18, 11:27 AM
جرب هذا
قم بإنشاء دالة Function داخل SqlServer بإسم GetPremiumTotal
ويتم استخدام الدالة GetPremiumTotal بالطريقة التالية
قم بإنشاء دالة Function داخل SqlServer بإسم GetPremiumTotal
كود :
CREATE FUNCTION dbo.GetPremiumTotal(
@salary float,
@dateStart date,
@dateEnd date,
@premium float)
RETURNS float
AS
BEGIN
DECLARE @yearFrac float;
SET @yearFrac = DATEDIFF(d, @dateStart, @dateEnd) / 365 ;
DECLARE @premiumTotal float;
SET @premiumTotal = ROUND( ((POWER( (1+ @premium), @yearFrac ) -1) * @salary), 2, 1) ;
RETURN @premiumTotal;
END
ويتم استخدام الدالة GetPremiumTotal بالطريقة التالية
كود :
SELECT GetPremiumTotal(Salary, DateStart, DateEnd, Premium) AS PremiumTotal
FROM Employees
الصفحات : 1 2