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

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

صورة
- - - - -

استعلام لتجميع القيم حسب السنوات


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

#1 ammar_kh1982

ammar_kh1982

    مشترك

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

تاريخ المشاركة 25 July 2006 - 12:33 PM


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

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



YEAR                           CLIENTS

---------                         --------------

2003                                1000

2004                                 500

2005                                 250



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

والمطلوب هو جملة سيليكت تقوم بتجميع أعداد العملاء للسنوات السابقة كالتالي :



YEAR                       CLIENTS

---------                     -------------

2003                         1000

2004                          1500

2005                          1750



أي أن يقوم بتجميع عدد العملاء للسنة الحالية مع العملاء القدامى



ولكم جزيل الشكر.










Abo '7waireh


#2 Shibeika

Shibeika

    عضو نشط

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

تاريخ المشاركة 27 July 2006 - 12:03 PM

السلام عليكم ورحمة الله وبركاته بمعلوماتي البسيطة أنا أعتقد أن كتابة 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
وجزاكم الله خيرا
أخوك / شبيكه ربيع

تم التعديل بواسطة Shibeika, 27 July 2006 - 12:05 PM.


#3 O_Almarei

O_Almarei

    عضو

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

تاريخ المشاركة 28 July 2006 - 07:34 PM

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

اليك الحل للسؤال الذي طرحته و هو مخصص لجدول محدد و ثابت القيم

[code=auto:0]
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@hotmail.com
o_almarei2@yahoo.com

#4 O_Almarei

O_Almarei

    عضو

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

تاريخ المشاركة 29 July 2006 - 12:29 PM

this is again:

-------------------------------------------------------------------------------------------------------------
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;
------------------------------------------------------------------------------------------------------------
bye
ارجو من الله ان يحقق لي كل امنياتي

-------------------------------------------------------------------------------

o_almarei@hotmail.com
o_almarei2@yahoo.com

#5 ammar_kh1982

ammar_kh1982

    مشترك

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

تاريخ المشاركة 02 August 2006 - 08:48 AM


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

شكرا للإخوة على الردود المتميزة....

بالنسبة للسؤال الذي طرحته مسبقا فإنني كنت أريد الحل عن طريق جملة سيليكت وليس كيرسر حتى أتمكن من استخدامها ك 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






Abo '7waireh