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

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


ammar_kh1982

Recommended Posts

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

YEAR                           CLIENTS
---------                         --------------
2003                                1000
2004                                 500
2005                                 250

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

YEAR                       CLIENTS
---------                     -------------
2003                         1000
2004                          1500
2005                          1750

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

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



رابط هذا التعليق
شارك

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

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

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


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;


نسال الله التوفيق
و السلبام عليكم
رابط هذا التعليق
شارك

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

رابط هذا التعليق
شارك

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

رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

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

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