الانتقال إلى المحتوى

ارجوا التصحيح


beta_smat

Recommended Posts

السلام عليكم اخواني

هاتان المسألتان قمت بحلهما ولكن الشكل النهائي للحل لا يوافق مخرجات الكتاب

اتمني ان تراجعوا الحل وتخبروني بمدي صحته

السؤال الأول هو

Create a query to display the total number of employees and, of that total, the number of employees hired in 1995, 1996, 1997, and 1998. Create appropriate column headings

الحل يظهر السنوات في صورة أعمدة و عمود به مجموعة عدد الموظفين ... وانا اظهرتهم بصورة افقة ولم استطع اظهار المجموع .... :wacko:

select to_char(hire_date,'yyyy')YEARs,count(*) as "Employees Hired"
from employees where to_char(hire_date,'yyyy')  in('1995','1996','1997','1998') 
group by to_char(hire_date,'yyyy')
order by YEARs





السؤال الثاني :

Create a matrix query to display the job, the salary for that job based on department number, and the total salary for that job, for departments 20, 50, 80, and 90, giving each column an appropriate heading

وحل هذه المسالة كذلك ... اريد ان تكون الادارات في صورة راسية وتحت كل ادارة اجمالي المرتبات وعلى المحور الراسي تظهر الوظائف كما في الصورة المرفقة

select Job_id, DEPARTMENT_ID ,sum(salary)
from employees where department_id in (20,50,80,90)
group by Job_id,DEPARTMENT_ID 
order by 2,3



المرفقات (صورة للنتائج المطلوبة)

http://www.araboug.org/ib/index.php?act=at...st&id=10812


انتظر تصحيح الاخطاء والتعديلات بشغف

محبكم
BETA_SMART
:unsure:

post-80141-1234150240_thumb.jpg

رابط هذا التعليق
شارك

USE DECODE FUNCTION FOR QUESTION NO 1:



SELECT COUNT (*) AS TOTAL  , SUM (Y95) AS Y1995 ,SUM (Y96) AS Y1996 ,SUM (Y97) AS Y1997 ,SUM (Y98) AS Y1998 
FROM ( SELECT  EMP_NO ,
        DECODE(to_char(hire_date,'yyyy'), '1995',1) Y95 ,
        DECODE(to_char(hire_date,'yyyy'), '1996',1) Y96 ,
        DECODE(to_char(hire_date,'yyyy'), '1997',1) Y97 ,
        DECODE(to_char(hire_date,'yyyy'), '1998',1) Y98   
    FROM employees ) AS TABLE01

رابط هذا التعليق
شارك

السؤال الثاني :

Create a matrix query to display the job, the salary for that job based on department number, and the total salary for that job, for departments 20, 50, 80, and 90, giving each column an appropriate heading


تفضل

SELECT   job_id "Job",
        SUM(DECODE(department_id , 20, salary)) "Dept 20",
        SUM(DECODE(department_id , 50, salary)) "Dept 50",
        SUM(DECODE(department_id , 80, salary)) "Dept 80",
        SUM(DECODE(department_id , 90, salary)) "Dept 90", 
        SUM(salary) "Total"
FROM employees GROUP BY job_id;

رابط هذا التعليق
شارك

بالنسبة للسؤال الاول :


1- عملنا جدول مؤقت Sub Query يعطينا نفس الأعمدة اللتي نريد تجميعها فيما بعد بأرقام السنوات من 1995 إلى 1998
2- يتم وضع رقم 1 أمام حقل السنة التي تم تعيين الموظف بها عن طريق دالة DECODE
3- يتم تجميع الأرقام الموجودة بكل حقل باستخدام SUM للحصول على عدد الموظفين بكل سنة
4- يلاحظ عدم استخدام Group By لأننا نريد تجميع جميع السجلات و الحصول على سطر واحد فقط

رابط هذا التعليق
شارك

بالنسبة للسؤال الاول :


1- عملنا جدول مؤقت Sub Query يعطينا نفس الأعمدة اللتي نريد تجميعها فيما بعد بأرقام السنوات من 1995 إلى 1998
2- يتم وضع رقم 1 أمام حقل السنة التي تم تعيين الموظف بها عن طريق دالة DECODE
3- يتم تجميع الأرقام الموجودة بكل حقل باستخدام SUM للحصول على عدد الموظفين بكل سنة
4- يلاحظ عدم استخدام Group By لأننا نريد تجميع جميع السجلات و الحصول على سطر واحد فقط




الاخ الكريم ... انا شاكر جدا لك .. شرح وافي وحل رائع
ولكن هذا المثال موجود في الفصل الرابع من مادة الاوركال وهو لم يقم بعد بشرح الـ Sub Query ... فهل هذا يعني ان لها حل اخر بدون استخدام الـ Sub Query

واشكرك جدا ولك تحياتي واحترامي

اخوك :unsure: تم تعديل بواسطة beta_smat
رابط هذا التعليق
شارك

ممكن نستخدم طريقة الأخ Mr.Abdullah فهي لا تعتمد على Sub Query
بس انا بصراحة ما جربتهاش

SELECT COUNT (*) AS TOTAL , 
SUM (DECODE(to_char(hire_date,'yyyy'), '1995',1)) AS Y1995 ,
SUM (DECODE(to_char(hire_date,'yyyy'), '1996',1)) AS Y1996 ,
SUM (DECODE(to_char(hire_date,'yyyy'), '1997',1)) AS Y1997 ,
SUM (DECODE(to_char(hire_date,'yyyy'), '1998',1)) AS Y1998 

FROM employees;

]

رابط هذا التعليق
شارك

تسلم اخوي بارك الله فيك ... هي فعلا تعمل بنجاح
واستطيع ان افسرها بنفس الطريقة التي قمت بشرحها لي

جزاكم الله خيرا اخواني
وبارك الله فيكم

محبكم
سامح حسن

تم تعديل بواسطة beta_smat
رابط هذا التعليق
شارك

  • بعد 1 سنة...

حل آخر للسؤال الأول

SELECT COUNT (*) AS TOTAL , 
select count(*) from employees where to_char(hire_date,'yyyy')= '1995' AS Y1995 ,
select count(*) from employees where to_char(hire_date,'yyyy')= '1996' AS Y1996 ,
select count(*) from employees where to_char(hire_date,'yyyy')= '1997' AS Y1997 ,
select count(*) from employees where to_char(hire_date,'yyyy')= '1998' AS Y1998 
FROM employees;



يجوز استخدام جمله الاختيار مكان اسم العامود فقط إذا كانت ترجع قيمه واحدة كهذا المثال

تم تعديل بواسطة Sireen
رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية