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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

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


8 رد (ردود) على هذا الموضوع

#1 beta_smat

beta_smat

    عضو

  • الأعضــاء
  • 39 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 09 February 2009 - 06:36 AM

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

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

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

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

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.o...t...st&id=10812


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

محبكم
BETA_SMART
:unsure:

ملفات مرفقة

  • ملف مرفق  ORACL.JPG   45.7كيلو   62 عدد مرات التحميل


#2 a_mukhtar78

a_mukhtar78

    عضو

  • الأعضــاء
  • 10 مشاركة

تاريخ المشاركة 09 February 2009 - 01:33 PM

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



#3 Mr.Abdullah

Mr.Abdullah

    عضو

  • الأعضــاء
  • 45 مشاركة

تاريخ المشاركة 09 February 2009 - 04:34 PM

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

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;


#4 beta_smat

beta_smat

    عضو

  • الأعضــاء
  • 39 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 10 February 2009 - 02:28 PM

اشكركم
اخوي Mr.Abdullah و اخوي a_mukhtar78
وكنت اطمع في شرح بسيط لافهم كيف تمت هذه العملية

ولكم مني خالص الشكر والتقدير

اخوكم :unsure:

#5 a_mukhtar78

a_mukhtar78

    عضو

  • الأعضــاء
  • 10 مشاركة

تاريخ المشاركة 10 February 2009 - 02:44 PM

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



#6 beta_smat

beta_smat

    عضو

  • الأعضــاء
  • 39 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 10 February 2009 - 03:28 PM

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



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

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

اخوك :unsure:

تم التعديل بواسطة beta_smat, 10 February 2009 - 03:29 PM.


#7 a_mukhtar78

a_mukhtar78

    عضو

  • الأعضــاء
  • 10 مشاركة

تاريخ المشاركة 11 February 2009 - 08:54 AM

ممكن نستخدم طريقة الأخ 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;
]


#8 beta_smat

beta_smat

    عضو

  • الأعضــاء
  • 39 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 11 February 2009 - 02:23 PM

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

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

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

تم التعديل بواسطة beta_smat, 11 February 2009 - 02:24 PM.


#9 Sireen

Sireen

    عضو

  • الأعضــاء
  • 49 مشاركة

تاريخ المشاركة 15 October 2010 - 03:40 AM

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

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, 15 October 2010 - 03:42 AM.

Ya Bab