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

استعلام للخبراء ....!


Abokamal_Elsafty

Recommended Posts

السلام عليكم
اذا كانت هذه النتيجة فى اخر الامر ستعرض على فورمة فيفضل استخدام PL/SQL وسيكون الحل اكثر تحكما منه عن SQL
وشكرا
ميجا

تم تعديل بواسطة khaledmega
رابط هذا التعليق
شارك

مرحبا

انا عملت جدول في البيانات اللي انت كاتبها بالأول وبعد هيك عملت الإستعلام؛ وكانت النتيجة زي مابدك انت بالزبط:

---table
CREATE TABLE abc AS SELECT '24/5/2009'	a,'x' b,	-0.2 c FROM dual UNION
SELECT '24/5/2009'	,'y'	,0.5 FROM dual UNION
SELECT '24/5/2009'	,'z'	,0 FROM dual UNION
SELECT '24/5/2009'	,'f'	,0 FROM dual UNION
SELECT '24/5/2009'	,'g'	,-0.7 FROM dual UNION
SELECT '25/5/2009'	,'x'	,0 FROM dual UNION
SELECT '25/5/2009'	,'z'	,0.3 FROM dual UNION
SELECT '25/5/2009',	'y'	,-0.3 FROM dual UNION
SELECT '25/5/2009',	'g'	,0.5 FROM dual UNION
SELECT '25/5/2009',	'f'	,0.3 FROM dual UNION
SELECT '26/5/2009',	'y',	0.3 FROM dual UNION
SELECT '26/5/2009',	'z',	0 FROM dual UNION
SELECT '26/5/2009',	'x',	0 FROM dual


--query
SELECT a,count(n) nigative,count(z) no_change,count(p) positivenum, count(n)+count(z)+count(p) ALLn FROM (select a,b,c,
CASE  
WHEN c <0 THEN 1 END n,
CASE  
WHEN c =0 THEN 1 END z,
CASE  
WHEN c >0 THEN 1 END p
from abc) GROUP BY a


مع امكانية تغيير اسماء الحقول...
post-71508-1243939349_thumb.jpg

تم تعديل بواسطة ORA-2008
رابط هذا التعليق
شارك

  • بعد 4 شهور...

هذا حل مباشر


select dat,
nvl((select count(*) from status where change>0 and status .dat=aa.dat group by dat),0) positive
, nvl((select count(*) from status where change<0 and status .dat=aa.dat group by dat),0) negative
,nvl((select count(*) from status where change=0 and status .dat=aa.dat group by dat),0) zero
,nvl((select count(*) from status where status .dat=aa.dat group by dat),0) tot
from status aa group by dat

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

هذا الحل افضل

select dat,nvl((select count(*) from status where change>0 and status .dat=aa.dat ),0) positive
         , nvl((select count(*) from status where change<0 and status .dat=aa.dat  ),0) negative
         ,nvl((select count(*) from status where change=0 and status .dat=aa.dat  ),0) zero
          ,nvl((select count(*) from status where status .dat=aa.dat  group by dat),0) tot
       from status aa group by dat
/

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

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

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

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

×   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.

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

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

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