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

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

صورة
- - - - -

استعرض أسماء الموظفين الذين عدد حروفهم متساوية


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

#16 السيد النمر

السيد النمر

    عضو

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

تاريخ المشاركة 10 April 2009 - 05:27 PM

مشاركة طيبة منك يا اخ m_mm622

وهذا هو الحل الذي ذكرته بطريقة أوضح حتى يستفيد من يراه

select first_name , length(first_name) 
from employees where length(first_name) = length(first_name)
order by length(first_name)


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

المطلوب ان تكون هذه هي النتيجة ولكن دون استخدام أرقام ، او متغيرات بديلة



FOR_LNTH 	FIF_LNTH 	SEX_LNTH
MILLER
TURNER
MARTIN JAMES
ADAMS
SCOTT
CLARK
BLAKE
JONES
ALLEN
SMITH
FORD
KING
WARD

14 rows selected.


#17 she2005

she2005

    عضو

  • الأعضــاء
  • 34 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Oracle & Java

تاريخ المشاركة 11 April 2009 - 03:03 PM

ده حل بردو




select ename,length(ename) from emp 
where length(ename) in  (select length(ename) 
									from emp where 
									ename is not null
									 group by length(ename)
									  having count(*)>1)
ORDER BY LENGTH(ENAME)

تم التعديل بواسطة she2005, 11 April 2009 - 03:05 PM.


#18 she2005

she2005

    عضو

  • الأعضــاء
  • 34 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Oracle & Java

تاريخ المشاركة 11 April 2009 - 03:09 PM

بس حد يعرف يطلع حل السؤال ده

فى اعمده

بحيت ان كل عمود كل الاسماء اللى فيه متساويه

بمعنى عمود للاسماء اللى عدد حروفها 6

و هكذا

مش عارف اوصله خالص للاسف :)


#19 colla

colla

    عضو نشط

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

تاريخ المشاركة 13 April 2009 - 11:42 AM

يا أخ she2005 لو كنت رجعت للمشاركات السابقه في الموضوع دا كنت لقيت انو انا قربت شويه من الحل
ووضعت كل الاسماء الي عدد حروفها متساويه في الرقم في عمود خاص . وانا متابع الموضوع دا كويس
فانا ارجو من الاعضاء المساعده في هذا الموضوع .

وكمان راح اكتب لك الكود مره ثانيه مع شويه زيادات بسيطه :

الحل السابق :

select decode(length(ename),4,ename) for_lnth,
decode(length(ename),5,ename) fif_lnth,
decode(length(ename),6,ename) sex_lnth
from emp where length(ename) in (select length(ename)
from emp group by length(ename))



الحل الجديد مع عرض الاسماء كامله وطول كل إسم :
عند مراجعتي للمشاركات السابقه وجدت احد الاعضاء قد وضع حل قريب من هذا الحل في الناتج النهائي :
بمعنى الناتج هو نفسه الناتج لكن الطريقه اختلت قليلا :

select ename, length(ename) len_gth, decode(length(ename),4,ename) for_lnth,
decode(length(ename),5,ename) fif_lnth,
decode(length(ename),6,ename) sex_lnth
from emp where length(ename) in (select length(ename)
from emp group by length(ename))

على المرء ان يسعى وليس عليه ادراك النجاح


صورة


#20 colla

colla

    عضو نشط

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

تاريخ المشاركة 21 April 2009 - 03:42 PM

يا اخ السيد النمر ارجو ان يكون هذا الحل مناسبا معك :


create or replace view names
as select decode(length(ename),4,ename) for_lnth,
decode(length(ename),5,ename) fif_lnth,
decode(length(ename),6,ename) sex_lnth
from emp where length(ename) in (select length(ename)
from emp group by length(ename));



select * from (select for_lnth, rownum rown from names where for_lnth is not null) a,
(select fif_lnth, rownum rown from names where fif_lnth is not null) b,
(select sex_lnth, rownum rown from names where sex_lnth is not null) c
where a.rown=b.rown and a.rown=c.rown;


وارجو من الاخوه الخبراء الافتاء

على المرء ان يسعى وليس عليه ادراك النجاح


صورة


#21 she2005

she2005

    عضو

  • الأعضــاء
  • 34 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Oracle & Java

تاريخ المشاركة 22 April 2009 - 11:33 AM

تمام كلام جميل يا اخ colla

بس المفروش ان انت تكتب الكود من غير ما تكتب اى ارقام

انت بعد كده هتشتغل على داتابيز كبيره جدا

فا مينفعش تبنى حلك على ارقام

انا شايف كده من وجهة نظرى


#22 Transporter

Transporter

    عضو

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

تاريخ المشاركة 22 April 2009 - 02:59 PM

بما انه في هذة الحالة يكون عدد الاعمدة متغير حسب اطوال الاسماء الموجودة في الجدول لذلك
أقترح حلا وسط ;)

بعمل procedure
صغير مع view

كالتالي

CREATE OR REPLACE PROCEDURE ppp_ppp IS
cursor g is select length(ename) x from emp group by length(ename);
b varchar2(500);
begin for i in g loop
b:=b||','||'decode(length(ename),'||i.x||',ename) a'||i.x;

end loop;
b:=substr(b,2);
execute immediate 'create or replace view zzzz as select '||b||' from emp'; end;


ثم نقوم بالاستعلام عن الفيو


select * from zzzz;


تحياتي