الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

بتاريخ:

السلام عليكم ورحمة الله وبركاته

إخواني الاعزاء

في الاسكيما الخاصة بالمستخدم SCOTT

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

لقد وصلت لهذا الحل وهو ناقص بالتأكيد

select a.ename , length(a.ename)
from emp a , emp b
where length(a.ename) = length(b.ename) and a.empno = b.mgr



وأخرج لي هذه النتيجة

ENAME LENGTH(A.ENAME)
---------- ---------------
BLAKE 5
JONES 5
SCOTT 5
BLAKE 5

بالطبع الحل ناقص

أرجو الحل من حضرتكم وشكرا

بتاريخ:

السلام عليكم...

1  select ename,length(ename) from emp where length(ename) in 2  (select length(ename) from emp where ename is not null
 3*  group by length(ename)  having count(*)>1)
SQL> /

ENAME      LENGTH(ENAME)
---------- -------------
MILLER                 6
TURNER                 6
MARTIN 6
JAMES                  5
ADAMS                  5
SCOTT                  5
CLARK                  5
BLAKE                  5
JONES                  5
ALLEN                  5
SMITH                  5

ENAME      LENGTH(ENAME)
---------- -------------
FORD                   4
KING                   4
WARD                   4

14 rows selected.
بتاريخ:
  • كاتب الموضوع

جزاكم الله خيرا على تعاونك

اظن أن ايضا هذا الحل ياتي بنفس النيجة

SELECT ENAME , LENGTH(ENAME) 
FROM EMP ORDER BY LENGTH(ENAME)




أريد أن اقسم الأسماء المتشابهه في عدد حروفها على هيئة أعمدة

بان ياتي بالاسماء التي عدد حروفها 4 حروف في عمود ، والاسماء التي عدد حروفها 5 حروف في عمود ، وهكذا

ارجو الرد

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

بتاريخ:
جزاكم الله خيرا على تعاونك

SELECT ENAME , LENGTH(ENAME) 
FROM EMP ORDER BY LENGTH(ENAME)




أريد أن اقسم الأسماء المتشابهه في عدد حروفها على هيئة أعمدة

بان ياتي بالاسماء التي عدد حروفها 4 حروف في عمود ، والاسماء التي عدد حروفها 5 حروف في عمود ، وهكذا

ارجو الرد

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



لا أظن أن هذا الحل سياتي بنفس النيجة لأنك استخدمت فقط
ORDER BY وهي تعمل فقط على أعادة الترتيب قم بإضافة سجل جديد وانت ستلاحظ الفرق
بتاريخ:
  • كاتب الموضوع

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

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

length 4 length5
-----------------
ADAMS
SCOTT
CLARK
BLAKE
JONES
ALLEN
SMITH
WARD

وهكذا

وشكرا

بتاريخ:
  • كاتب الموضوع

انا محتاج اعمل تحت كل length المتساوي من الاسماء في عدد الحروف

ارجو الرد

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

بتاريخ:

أخي الكريم...
بالنسبة لأي سؤال نريد فيه التحكم بقيم الأعمدة فيجب تحديد عدد الأعمدة المراد إنشائه
فمثلاً في مثالك يجب تحديد عدد الأحرف الأعظمي الممكن تواجده في الجدول , بعد هذه المرحلة سوف تقوم باستخدام case or decode و تكراره بعدد الأعمدة
لذلك فإن تنفيذها باستخدام الاستعلام هي في الواقع غير ديناميكية...
إن أردت تحديد عدد الأعمدة .. استطيع مساعدك

بتاريخ:
  • كاتب الموضوع

الموجود في جدول EMP ثلاث مجموعات من الحروف

موظفين عدد حروف أسمائهم 4 حروف

وموظفين عدد حروف اسمائهم 5 حروف

وموظفين عدد حروف اسمائهم 6 حروف

هل هذا قصدك أن احدد لك عدد الاعمدة ثم ستقوم بالعمل على دالة DECOD او CASE من خلال الاستعلام الفرعي في جزء FROM

ألا يوجد حل أخر يجعلني اقسم الاسماء المتساوية في عدد الحروف على شكل اعمدة من خلال الاستعلام

أرجو المشاركة وطرح الحلول

بتاريخ:

أعتقد أخ نمر


يجب أن تحدد عدد الأحرف لتتمكن من إضافة الأعمدة وذلك بالعمل على دالة DECOD او CASE
مثال :
SELECT ENAME,LENGTH(ENAME) ,CASE WHEN LENGTH(ENAME)=4 THEN ENAME ELSE NULL END "4",CASE WHEN LENGTH(ENAME)=5 THEN ENAME ELSE NULL END "5",
CASE WHEN LENGTH(ENAME)=6 THEN ENAME ELSE NULL END "6"
FROM EMP ORDER BY LENGTH(ENAME) ;[/center]

بتاريخ:
  • كاتب الموضوع

شاكر أخي جود على ردك

لكن لو كان الأمر كذلك يمكنني استخدام المتغيرات البديلة

select decode (length(ename) , &L,ename) names from emp



ألا يوجد طريقة أخرى في الاستعلام ياتي بالأسماء بدون اللجوء الى طريقة كتابة عدد الحروف

شكرا لك من فكر وساعدني

ارجو مشاركة الخبراء

بتاريخ:

يا اخ السيد النمر هذا ما استطعت التوصل إليه فارجو منك او من الاخوه الاعضاء ان يحوال
احد منكم بإزالة الخانات الفاضية حتى يكون المثال قد اكتمل . وبالنسبه إلى عدم ظهور الارقام في الاستعلام
فهذي يا خوي من لقيتلها حل وإذا لقيت حاجه نرجو منك تشاركنا فيها


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));

بتاريخ:
  • كاتب الموضوع

جزاك الله خيرا يا أخ colla

بس الامر كما قدمه الاخ جود
وتبقى فكرة المتغيرات البديلة أفضل من أن نكتب أرقام لعدد حروف الأسماء

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

نرجو الرد من المتخصصين

وشكرا لكل المشاركين

بتاريخ:
  • كاتب الموضوع

select decode (length(ename) , &L,ename,length(ename) ) names from emp



هذا أخر ما وصلت إليه من خلال المتغيرات البديلة
إذا قمت بالضغط على رقم 5 مثلا

NAMES
---------
SMITH
ALLEN
4
JONES
6
BLAKE
CLARK
SCOTT
4
6
ADAMS

NAMES
---------
JAMES
4
6



إذا ضغطت على رقم غير موجود كعدد حروف في الجدول مثلا كرقم 3

NAMES
-------------------
5
5
4
5
6
5
5
5
4
6
5

NAMES
-------------------
5
4
6

14 rows selected.



أظن الطريقة واضحة

لكن أعتقد أن هناك أفضل من هذا

اتمنى مشاركة الناس معانا

وفقكم الله

تم تعديل بواسطة السيد النمر

بتاريخ:

انا عندى حل وان شاء الله يكون كويس وينفعك
دى جمله سيليكت هتطلع اسماء كل الموظفين مترتبين وكل مجموعه حروفهم متساويه مع بعض
وانا عملت مثال على last-name فى جدول emplpyees
وانت طبعا ممكن تطبق على اى جدول تانى
ودى جمله السيليكت
select last_name , length (last_name) len ------- هنا طبعا بنعمل سيليكت لــ last_name و طول حروف الــ last_name وسميت العمود هنا len
from employees --------- هنا طبعا السيليكت من جدول الــ employees
where length (last_name) = length (last_name) ------- هنا شرط السيليكت وهو مساواه الحروف ببعض
order by len -------- وهنا انا رتبت الاسماء الى هتطلع علشان يبقى كل مجموعه مع بعض يعنى الى عدد حروفهم 3 وبعدين وراهم الى عدد حروفهم 4 وهكذا ....

تم تعديل بواسطة m_mm622

بتاريخ:

يا ريت اكون قدرت افهم قصدك واكون عرفت اساعدك وياريت ترد عليا تقولى فكرت البسيطه نفعتك ولا لا
وشكرا ليك وللمنتدى الجميل

تم تعديل بواسطة m_mm622

بتاريخ:
  • كاتب الموضوع

مشاركة طيبة منك يا اخ 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.

بتاريخ:

ده حل بردو




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

بتاريخ:

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

فى اعمده

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

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

و هكذا

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

بتاريخ:

يا أخ 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))

  • بعد 2 أسابيع...
بتاريخ:

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


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;



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

بتاريخ:

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

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

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

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

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

بتاريخ:

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

بعمل 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;



تحياتي

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.