منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
اذا ممكن مساعدة في تحويل معادلة في اكسل الى كود sql server - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم أسئلة واستفسارات الأعضاء - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=94)
+--- قسم : Microsoft SQL Server (http://vb4arb.com/vb/forumdisplay.php?fid=171)
+--- الموضوع : اذا ممكن مساعدة في تحويل معادلة في اكسل الى كود sql server (/showthread.php?tid=26598)

الصفحات: 1 2


اذا ممكن مساعدة في تحويل معادلة في اكسل الى كود sql server - sharawee707 - 22-09-18

السلام عليكم 

تحياتي للجميع 

اذا ممكن مساعدة في تحويل معادلة في اكسل الى كود sql server
حسب المرفق


RE: اذا ممكن مساعدة في تحويل معادلة في اكسل الى كود sql server - elgokr - 26-09-18

فى البدابة الجدول عبارة عن التالى

الراتب الاساسـي                   :  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 اعمدة فقط

تحياتى لك
وتمنياتى لك التوفيق



RE: اذا ممكن مساعدة في تحويل معادلة في اكسل الى كود sql server - sharawee707 - 26-09-18

كلمة شكر قليلة بحقك بارك الله فيك اخي الكريم 


وجزاك الله كل خير

السلام عليكم 

اخي الكريم طبقت الكود على sql server 

اعطاني الخطأ التالية

Msg 195, Level 15, State 10, Line 2

'val' is not a recognized built-in function name.


RE: اذا ممكن مساعدة في تحويل معادلة في اكسل الى كود sql server - عبدالله الدوسري - 26-09-18

Val هي Function تخص قواعد بيانات MS Access

ولا يوجد ما يقابلها في قواعد بيانات SQL Server


RE: اذا ممكن مساعدة في تحويل معادلة في اكسل الى كود sql server - sharawee707 - 26-09-18

اشكرك اخي [b]عبدالله الدوسري وبارك الله فيك [/b]


RE: اذا ممكن مساعدة في تحويل معادلة في اكسل الى كود sql server - elgokr - 26-09-18

مرحباً اخى 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

تحياتى لك
وتمنياتى لك التوفيق



RE: اذا ممكن مساعدة في تحويل معادلة في اكسل الى كود sql server - sharawee707 - 26-09-18

بارك الله فيك واشكرك اخي الكريم على هذه المعلومة القيمة 

كل الاحترام التقدير


RE: اذا ممكن مساعدة في تحويل معادلة في اكسل الى كود sql server - elgokr - 27-09-18

الشكر لله والحمد لله
والحمد لله على كل حال

تحياتى لك
وتمنياتى لك التوفيق



RE: اذا ممكن مساعدة في تحويل معادلة في اكسل الى كود sql server - sharawee707 - 23-10-18

السلام عليكم 

اخي الكريم بعد تجربة المثال لا تظهر النتائج الصحيحة في sql server بعكس الاكسيس




RE: اذا ممكن مساعدة في تحويل معادلة في اكسل الى كود sql server - rnmr - 23-10-18

جرب هذا


قم بإنشاء دالة 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