السيد النمر بتاريخ: 3 أبريل 2009 تقديم بلاغ مشاركة بتاريخ: 3 أبريل 2009 السلام عليكم ورحمة الله وبركاتهإخواني الاعزاء في الاسكيما الخاصة بالمستخدم 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 5JONES 5SCOTT 5BLAKE 5بالطبع الحل ناقص أرجو الحل من حضرتكم وشكرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
TROYMAN بتاريخ: 3 أبريل 2009 تقديم بلاغ مشاركة بتاريخ: 3 أبريل 2009 السلام عليكم... 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. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
السيد النمر بتاريخ: 3 أبريل 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 3 أبريل 2009 جزاكم الله خيرا على تعاونك اظن أن ايضا هذا الحل ياتي بنفس النيجة SELECT ENAME , LENGTH(ENAME) FROM EMP ORDER BY LENGTH(ENAME) أريد أن اقسم الأسماء المتشابهه في عدد حروفها على هيئة أعمدة بان ياتي بالاسماء التي عدد حروفها 4 حروف في عمود ، والاسماء التي عدد حروفها 5 حروف في عمود ، وهكذا ارجو الرد وجزاكم الله خيرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
جود بتاريخ: 3 أبريل 2009 تقديم بلاغ مشاركة بتاريخ: 3 أبريل 2009 جزاكم الله خيرا على تعاونك SELECT ENAME , LENGTH(ENAME) FROM EMP ORDER BY LENGTH(ENAME) أريد أن اقسم الأسماء المتشابهه في عدد حروفها على هيئة أعمدة بان ياتي بالاسماء التي عدد حروفها 4 حروف في عمود ، والاسماء التي عدد حروفها 5 حروف في عمود ، وهكذا ارجو الرد وجزاكم الله خيرا لا أظن أن هذا الحل سياتي بنفس النيجة لأنك استخدمت فقط ORDER BY وهي تعمل فقط على أعادة الترتيب قم بإضافة سجل جديد وانت ستلاحظ الفرق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
السيد النمر بتاريخ: 3 أبريل 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 3 أبريل 2009 الهدف كان استعراض اسماء الموظفين التي حروف اسمائهم متساوية اريد الان ان اجعل كل عدد حورق متاشبهه في عمود بهذا الشكل length 4 length5----------------- ADAMS SCOTTCLARK BLAKEJONES ALLEN SMITH WARD وهكذا وشكرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
السيد النمر بتاريخ: 4 أبريل 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 4 أبريل 2009 انا محتاج اعمل تحت كل length المتساوي من الاسماء في عدد الحروف ارجو الرد وجزاكم الله خيرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
TROYMAN بتاريخ: 4 أبريل 2009 تقديم بلاغ مشاركة بتاريخ: 4 أبريل 2009 أخي الكريم...بالنسبة لأي سؤال نريد فيه التحكم بقيم الأعمدة فيجب تحديد عدد الأعمدة المراد إنشائهفمثلاً في مثالك يجب تحديد عدد الأحرف الأعظمي الممكن تواجده في الجدول , بعد هذه المرحلة سوف تقوم باستخدام case or decode و تكراره بعدد الأعمدةلذلك فإن تنفيذها باستخدام الاستعلام هي في الواقع غير ديناميكية...إن أردت تحديد عدد الأعمدة .. استطيع مساعدك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
السيد النمر بتاريخ: 5 أبريل 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 5 أبريل 2009 الموجود في جدول EMP ثلاث مجموعات من الحروف موظفين عدد حروف أسمائهم 4 حروف وموظفين عدد حروف اسمائهم 5 حروف وموظفين عدد حروف اسمائهم 6 حروفهل هذا قصدك أن احدد لك عدد الاعمدة ثم ستقوم بالعمل على دالة DECOD او CASE من خلال الاستعلام الفرعي في جزء FROM ألا يوجد حل أخر يجعلني اقسم الاسماء المتساوية في عدد الحروف على شكل اعمدة من خلال الاستعلام أرجو المشاركة وطرح الحلول اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
جود بتاريخ: 5 أبريل 2009 تقديم بلاغ مشاركة بتاريخ: 5 أبريل 2009 أعتقد أخ نمر يجب أن تحدد عدد الأحرف لتتمكن من إضافة الأعمدة وذلك بالعمل على دالة 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] اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
السيد النمر بتاريخ: 5 أبريل 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 5 أبريل 2009 شاكر أخي جود على ردك لكن لو كان الأمر كذلك يمكنني استخدام المتغيرات البديلة select decode (length(ename) , &L,ename) names from emp ألا يوجد طريقة أخرى في الاستعلام ياتي بالأسماء بدون اللجوء الى طريقة كتابة عدد الحروف شكرا لك من فكر وساعدني ارجو مشاركة الخبراء اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
colla بتاريخ: 6 أبريل 2009 تقديم بلاغ مشاركة بتاريخ: 6 أبريل 2009 يا اخ السيد النمر هذا ما استطعت التوصل إليه فارجو منك او من الاخوه الاعضاء ان يحوال احد منكم بإزالة الخانات الفاضية حتى يكون المثال قد اكتمل . وبالنسبه إلى عدم ظهور الارقام في الاستعلام فهذي يا خوي من لقيتلها حل وإذا لقيت حاجه نرجو منك تشاركنا فيها 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)); اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
السيد النمر بتاريخ: 7 أبريل 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 7 أبريل 2009 جزاك الله خيرا يا أخ colla بس الامر كما قدمه الاخ جود وتبقى فكرة المتغيرات البديلة أفضل من أن نكتب أرقام لعدد حروف الأسماء نريد طريقة نقسم بها عدد حروف الأسماء دون اللجوء الى ادخال ارقام سواء كان في الاستعلام أو بعد تنفيذ الاستعلام من خلال المتغيرات البديلة نرجو الرد من المتخصصين وشكرا لكل المشاركين اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
السيد النمر بتاريخ: 7 أبريل 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 7 أبريل 2009 (معدل) 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. أظن الطريقة واضحة لكن أعتقد أن هناك أفضل من هذا اتمنى مشاركة الناس معانا وفقكم الله تم تعديل 7 أبريل 2009 بواسطة السيد النمر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
m_mm622 بتاريخ: 9 أبريل 2009 تقديم بلاغ مشاركة بتاريخ: 9 أبريل 2009 (معدل) انا عندى حل وان شاء الله يكون كويس وينفعك دى جمله سيليكت هتطلع اسماء كل الموظفين مترتبين وكل مجموعه حروفهم متساويه مع بعضوانا عملت مثال على last-name فى جدول emplpyeesوانت طبعا ممكن تطبق على اى جدول تانى ودى جمله السيليكتselect last_name , length (last_name) len ------- هنا طبعا بنعمل سيليكت لــ last_name و طول حروف الــ last_name وسميت العمود هنا lenfrom employees --------- هنا طبعا السيليكت من جدول الــ employeeswhere length (last_name) = length (last_name) ------- هنا شرط السيليكت وهو مساواه الحروف ببعضorder by len -------- وهنا انا رتبت الاسماء الى هتطلع علشان يبقى كل مجموعه مع بعض يعنى الى عدد حروفهم 3 وبعدين وراهم الى عدد حروفهم 4 وهكذا .... تم تعديل 9 أبريل 2009 بواسطة m_mm622 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
m_mm622 بتاريخ: 9 أبريل 2009 تقديم بلاغ مشاركة بتاريخ: 9 أبريل 2009 (معدل) يا ريت اكون قدرت افهم قصدك واكون عرفت اساعدك وياريت ترد عليا تقولى فكرت البسيطه نفعتك ولا لاوشكرا ليك وللمنتدى الجميل تم تعديل 9 أبريل 2009 بواسطة m_mm622 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
السيد النمر بتاريخ: 10 أبريل 2009 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 10 أبريل 2009 مشاركة طيبة منك يا اخ 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. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
she2005 بتاريخ: 11 أبريل 2009 تقديم بلاغ مشاركة بتاريخ: 11 أبريل 2009 (معدل) ده حل بردو 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) تم تعديل 11 أبريل 2009 بواسطة she2005 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
she2005 بتاريخ: 11 أبريل 2009 تقديم بلاغ مشاركة بتاريخ: 11 أبريل 2009 بس حد يعرف يطلع حل السؤال ده فى اعمده بحيت ان كل عمود كل الاسماء اللى فيه متساويهبمعنى عمود للاسماء اللى عدد حروفها 6و هكذا مش عارف اوصله خالص للاسف اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
colla بتاريخ: 13 أبريل 2009 تقديم بلاغ مشاركة بتاريخ: 13 أبريل 2009 يا أخ 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)) اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
colla بتاريخ: 21 أبريل 2009 تقديم بلاغ مشاركة بتاريخ: 21 أبريل 2009 يا اخ السيد النمر ارجو ان يكون هذا الحل مناسبا معك : 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; وارجو من الاخوه الخبراء الافتاء اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
she2005 بتاريخ: 22 أبريل 2009 تقديم بلاغ مشاركة بتاريخ: 22 أبريل 2009 تمام كلام جميل يا اخ colla بس المفروش ان انت تكتب الكود من غير ما تكتب اى ارقامانت بعد كده هتشتغل على داتابيز كبيره جدا فا مينفعش تبنى حلك على ارقام انا شايف كده من وجهة نظرى اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Transporter بتاريخ: 22 أبريل 2009 تقديم بلاغ مشاركة بتاريخ: 22 أبريل 2009 بما انه في هذة الحالة يكون عدد الاعمدة متغير حسب اطوال الاسماء الموجودة في الجدول لذلكأقترح حلا وسط بعمل 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; تحياتي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.