بتاريخ: 25 يوليو 200619 سنة comment_75083 السلام عليكم.. عندي جدول يحتوي السنوات ومجموع العملاء كالتالي YEAR CLIENTS --------- -------------- 2003 1000 2004 500 2005 250 هذا الجدول يعبر عن أعداد العملاء المسجلين خلال كل عام والمطلوب هو جملة سيليكت تقوم بتجميع أعداد العملاء للسنوات السابقة كالتالي : YEAR CLIENTS --------- ------------- 2003 1000 2004 1500 2005 1750 أي أن يقوم بتجميع عدد العملاء للسنة الحالية مع العملاء القدامى ولكم جزيل الشكر. تقديم بلاغ
بتاريخ: 27 يوليو 200619 سنة comment_75245 السلام عليكم ورحمة الله وبركاته بمعلوماتي البسيطة أنا أعتقد أن كتابة 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 يوليو 200619 سنة بواسطة Shibeika تقديم بلاغ
بتاريخ: 28 يوليو 200619 سنة comment_75297 السلام عليكم و رحمة الله وبركاته تحية طيبة و بعد...اليك الحل للسؤال الذي طرحته و هو مخصص لجدول محدد و ثابت القيم 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;نسال الله التوفيقو السلبام عليكم تقديم بلاغ
بتاريخ: 29 يوليو 200619 سنة comment_75350 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 تقديم بلاغ
بتاريخ: 2 أغسطس 200619 سنة كاتب الموضوع comment_75626 السلام عليكم... شكرا للإخوة على الردود المتميزة.... بالنسبة للسؤال الذي طرحته مسبقا فإنني كنت أريد الحل عن طريق جملة سيليكت وليس كيرسر حتى أتمكن من استخدامها ك 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 تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.