تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[SQL] كود sql
#1
السلام عليكم 
لو فرضنا أن لدينا جدول   t1   به حقل  main_salary  عبارة عن الأجر الوظيفي للموظف 
وأصدرت الحكومة قرار بمنح جميع الموظفين علاوى دورية قدرها  7%  من الأجر الوظيفي
بحد أدنى قدره 65 جنيها  في 1/7/2018
كيف يمكن صياغة ذلك بعبارة sql

select main_salary(main_salary * 0.07) from t1 
where main_salary > 65

أرجو التصحيح  لو يوجد خطأ

select  أم  update  ??
الرد
تم الشكر بواسطة:
#2
وعليكم السلام 

أخي أبو عمار , إذا كان الموضوع حسابات مالية , وفيها قرار حكومة هههههههههههه
استنى شوي مش بهذة الطريقة ......

العلاوة الدورية الأفضل يكون لها جدول مختلف مرتبط برقم الموظف
وكل علاوة دورية تنظاف لهذا الجدول
لكن طريقة الحساب راح تختلف قليلاً
على أساس يطلع معك الأجر الوظيفي ( تحسب الأجر الأساسي : وهو عبار عن أول مربوط + جميع العلاوات الدورية التي تخصة في جدول العلاوات الدورية )
مثلاً : العلاوة الدورية بمقدار زيادة 7% كل سنة
---------------------------------------------------------------

البداية ستكون كالتالي بهذة الأرقام مثلاً :
الأجر الأساسي هو : 1000
مجموع العلاوات الدورية  هو : صفر

علاوة دورية إستحقاق في سنة 2015 = (1000 + جميع علاوات الموظف في جدول العلاوات الدورية ) * 7% = 70 
                                                      (                           1000                                         ) * %7 = 70  
يتم إضافة سجل جديد في جدول العلاوات الدورية 
رقم الموظف : 1 , القيمة 70 , تاريخ العلاوة 01/01/2015
----------------------------------------------------------------
مجموع العلاوات في جدول العلاوات الدورية أصبح = ( 70 )
الأجر الوظيفي أصبح = 1070   ( وهو ناتج الأجر الأساسي + جميع العلاوات الدورية الموجودة في جدول العلاوات )

علاوة دورية إستحقاق في سنة 2016 = (1000 + جميع علاوات الموظف في جدول العلاوات الدورية ) * 7% = 74.9
                                                      (                           1070                                         ) * %7 = 74.9
يتم إضافة سجل جديد في جدول العلاوات الدورية 
رقم الموظف : 1 , القيمة 74.9 , تاريخ العلاوة 01/01/2016
----------------------------------------------------------------
مجموع العلاوات في جدول العلاوات الدورية أصبح = ( 144.9)
الأجر الوظيفي أصبح = 1144.9   ( وهو ناتج الأجر الأساسي + جميع العلاوات الدورية الموجودة في جدول العلاوات )

علاوة دورية إستحقاق في سنة 2017 = (1000 + جميع علاوات الموظف في جدول العلاوات الدورية ) * 7% = 80.143
                                                      (                           1144.9                                      ) * %7 = 80.143
يتم إضافة سجل جديد في جدول العلاوات الدورية 
رقم الموظف : 1 , القيمة 80.143 , تاريخ العلاوة 01/01/2017
----------------------------------------------------------------
مجموع العلاوات في جدول العلاوات الدورية أصبح = ( 225.043)
الأجر الوظيفي أصبح = 1225.043   ( وهو ناتج الأجر الأساسي + جميع العلاوات الدورية الموجودة في جدول العلاوات )


وهكذا .... 

ستحصل على جدول يبين العلاوات الدورية وتواريخها 
وبإمكانك معرفة الأجر الوظيفي ( الأجر الأساسي + جميع العلاوات الدورية الموجودة في جدول العلاوات )


إن شاء الله تكون فكرة مناسبة لك .

تحياتي
الرد
تم الشكر بواسطة: elgokr , abu ammar
#3
وعليكم السلام  ورحمة الله وبركاته

مرحباً اخى abu ammar
انا هتجاهل موضوع الحكومة وما شبه
واتخطى القواعد والاسوس على بناء ذلك

لكن بالشكل العام
لديك موظين وتريد انشاء 7% لكل موظف عن كل سنة
بحد ادنى 65 جنيه فبالتالى سيتم الاتى

لنقول لديك جدول الخاص بالمرتبات وجدول خاص بالزيادات السنوية

فى البداية فى جدول الزيادات هيتم عمل التالى
كود :
INSERT INTO Test ( Salary, Dategive)
SELECT  iif((( Test2.Salary * 7) / 100 ) < 65, 65,  (( Test2.Salary * 7) / 100 )) as Salary, CONVERT (date, GETDATE()) as Dategive
FROM Test2

وهنا ما سيتم اضافة النسبة المضافة للموظف عن هذا العام

ناتى بعد ذلك فى جدول المرتبات لاضافة الزيادة على المرتب
كود :
UPDATE Test2 SET Salary =  iif((( Salary * 7) / 100 ) < 65, (Salary + 65), (Salary + (( Salary * 7) / 100 )))
 
وبكده هيتم تحديث جميع الموظفين بالنسبة المحددة 7%
الشرح بالاعلى يطبق على Sql Server 2012 وما اعلى
وللاصدار 2008 وما اقل او اعلى يمكنك تطبيق الكود بهذا الشكل

لجدول الزيادات
كود :
INSERT INTO Test ( Salary, Dategive)
SELECT  CASE
       WHEN (Test2.Salary * 7) / 100 <= 65 THEN 65
       ELSE (Test2.Salary * 7) / 100
   END as Salary, CONVERT (date, GETDATE()) as Dategive  
FROM Test2
والان لجدول الرواتب
كود :
UPDATE Test2 SET Salary =  CASE
       WHEN (Salary * 7) / 100 <= 65 THEN 65
       ELSE (Salary * 7) / 100
   END

طبعاً ما تم شرحة توضيح لكيفية التعامل كمثال
كل ما عليك بتغيير المسميات واضافة ما هو بحاجة له

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى تقديم   لكل من يقوم بالمساهمة
فى حل اى مشكلة او استفسار لديك مع اضافة رد بشكره ودعوة له
فالجميع هنا يعمل على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله
الرد
تم الشكر بواسطة: abu ammar
#4
اعمل جدول منفصل للعلاوة و ضيفة قيمة العلاوة على حسب السنة 
مكون من الرقم الظيفي - قيمة العلاوة- سنة العلاوة 

و تابع شرح الاخوة جزاهم الله خيرا 
الرد
تم الشكر بواسطة: abu ammar
#5
شكرا جزيلا للجميع  وأنا آسف يا جماعة فأنا مبتدئ بالبرمجة و البرمجة بالنسبة لي هواية  
انا أعمل مدير موارد بشرية  وصممت برنامج به بيانات العاملين بالوحدة ومن هذه البيانات 
الأجر الوظيفي فبدلا من تحديث الاجر الوظيفي لأكثر من  1000 موظف كل موظف على حدة
فكرت في عمل استعلام أقوم من خلاله بتحديث الأجر الوظيفي لجميع العاملين  بكبسة زر.
شكرا جزيلا  وسأطبق المعلومات اللي تفضلتم بها
الرد
تم الشكر بواسطة:


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم