ammar_kh1982 بتاريخ: 25 يوليو 2006 تقديم بلاغ مشاركة بتاريخ: 25 يوليو 2006 السلام عليكم.. عندي جدول يحتوي السنوات ومجموع العملاء كالتالي YEAR CLIENTS --------- -------------- 2003 1000 2004 500 2005 250 هذا الجدول يعبر عن أعداد العملاء المسجلين خلال كل عام والمطلوب هو جملة سيليكت تقوم بتجميع أعداد العملاء للسنوات السابقة كالتالي : YEAR CLIENTS --------- ------------- 2003 1000 2004 1500 2005 1750 أي أن يقوم بتجميع عدد العملاء للسنة الحالية مع العملاء القدامى ولكم جزيل الشكر. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Shibeika بتاريخ: 27 يوليو 2006 تقديم بلاغ مشاركة بتاريخ: 27 يوليو 2006 (معدل) السلام عليكم ورحمة الله وبركاته بمعلوماتي البسيطة أنا أعتقد أن كتابة SQL لمعالجة هذه المعضلة ليس بالإمكان. وأضعف الإيمان هذا الكود التاليdeclare cursor c is select * from sum_clients order by 1; rec c%rowtype; i number:=0; tot number:=0; begin open c; loop fetch c into rec; if c%notfound then exit; end if; i:=i+1; if i=1 then tot:=rec.clients; dbms_output.put_line('Year'||' '||'Clients'); dbms_output.put_line('----'||' '||'------'); else tot:=tot+rec.clients; end if; dbms_output.put_line(rec.year||' '||tot); end loop;close c;end;/أو إستخدام Case ولكنني أجهله ونظرا لأنك تريد أن تذهب من خلال امر ال Select إلي الوراء فلا يمكن هذا إلا بعمل Cursor أو عمل مقداح أو زناد Trigger علي مستوي هذا الجدول بمجرد الإنتقال من سنة إلي سنة بتجميع السنوات الماضية وإدخال القيم إلي جدول آخر أو أن تعمله أثناء عمل الربورت لأنه في حد ذاته يعمل عمل ال Cursorوجزاكم الله خيراأخوك / شبيكه ربيع تم تعديل 27 يوليو 2006 بواسطة Shibeika اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
O_Almarei بتاريخ: 28 يوليو 2006 تقديم بلاغ مشاركة بتاريخ: 28 يوليو 2006 السلام عليكم و رحمة الله وبركاته تحية طيبة و بعد...اليك الحل للسؤال الذي طرحته و هو مخصص لجدول محدد و ثابت القيم select year, case year when 2003 then client when 2004 then ( select sum(client) from clint where year in(2003,2004))when 2005 then ( select sum(client) from clint where year in(2003,2004,2005)) else client end "Increment Client "from clint;نسال الله التوفيقو السلبام عليكم اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
O_Almarei بتاريخ: 29 يوليو 2006 تقديم بلاغ مشاركة بتاريخ: 29 يوليو 2006 this is again:-------------------------------------------------------------------------------------------------------------select year, case year when 2003 then clientwhen 2004 then ( select sum(client) from clint where year in(2003,2004))when 2005 then ( select sum(client) from clint where year in(2003,2004,2005))else client end "Increment Client "from clint;------------------------------------------------------------------------------------------------------------bye اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ammar_kh1982 بتاريخ: 2 أغسطس 2006 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 2 أغسطس 2006 السلام عليكم... شكرا للإخوة على الردود المتميزة.... بالنسبة للسؤال الذي طرحته مسبقا فإنني كنت أريد الحل عن طريق جملة سيليكت وليس كيرسر حتى أتمكن من استخدامها ك INLINE VIEW. لقد استطعت أن أكتب جملة السيليكت و هذا هو الحل لتعم الفائدة للجميع و شكرا مرة أخرى على جهودكم الطيبة. SELECT R.CLT_YEAR, SUM(R.CLT) OVER (ORDER BY R.CLT_YEAR RANGE UNBOUNDED PRECEDING) ACCUMULATED_SUM FROM (SELECT TO_CHAR(CLT_CRT_DATE,'RRRR') CLT_YEAR, COUNT(*) CLT FROM CLIENTS GROUP BY TO_CHAR(CLT_CRT_DATE,'RRRR')) R اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.