delphi4arab منتديات دلفي للعرب
مشكل في بناء استعلام أو اجراء متصمن - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : مشكل في بناء استعلام أو اجراء متصمن (/showthread.php?tid=7680)



مشكل في بناء استعلام أو اجراء متصمن - kito - 01-04-2016

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


أنا مبتدئ  متشرف بانضمامي إلى المنتدى ...

أواجه مشكلة منذ أسابيع  و لم أفلح  بعد بحثي في إيجاد حل لها . باختصار هي :

لدي قاعدة بيانات بها جدول :  السنوات / الأجر :

أريد فضلا  فصل  الجدول باستعلام أو إجراء متضمن  إلى عدة جداول  - محدودة العدد -

[b]salary   /  year c
.....................  salary /  [b]year_B [/b].....................salary  /  [b]year_A[/b]
[/b]

2005     /   400     ..................... 2006     /   400    ......................2007     /   400   
2005     /   400     ..................... 2006     /   250    ......................2007     /   420 
2005     /   400     ..................... 2006     /   400    ......................2007     /   580
2005     /   400     ..................... 2006     /   400    ......................2007     /   315  
حاولت استخدام  إجراء متضمن بيد أنّى نجحت فقط في  اظهار السنوات  و حدث  خلط كبير في تقسيم  خانة الأجور إلى مكانها  الإجراء كالتالي - مبدئيا يقوم بفصل سنتين - :

كود :
SET TERM ^ ; ALTER PROCEDURE TRY (    IPIC_Y Integer ) RETURNS (    COUNTY1 Integer,    SALARY1 Integer,    COUNTY2 Integer,    SALARY2 Integer ) AS declare variable i integer; --DECLARE VARIABLE variable_name < datatype>; BEGIN --i=0 ; --while (i < 2) do for SELECT  c1.year_bry,c1.somme ,c2.year_bry,c2.somme FROM BRY c1 ,BRY c2 where c1.year_bry =:ipic_y and c2.year_bry =:ipic_y +1     --  for select YEAR_BRY,somme  --   from BRY where bry.YEAR_BRY = :ipic_y  /* write your code here */     into :county1,SALARY1,county2,SALARY2

و شكرا

عفوا  أظنني بترت جزءا من الكود    Blush    و هاهو  الكود كاملا  :

كود :
SET TERM ^ ; ALTER PROCEDURE TRY (    IPIC_Y Integer ) RETURNS (    COUNTY1 Integer,    SALARY1 Integer,    COUNTY2 Integer,    SALARY2 Integer ) AS declare variable i integer; --DECLARE VARIABLE variable_name < datatype>; BEGIN --i=0 ; --while (i < 2) do for SELECT  c1.year_bry,c1.somme ,c2.year_bry,c2.somme FROM BRY c1 ,BRY c2 where c1.year_bry =:ipic_y and c2.year_bry =:ipic_y +1     --  for select YEAR_BRY,somme  --   from BRY where bry.YEAR_BRY = :ipic_y  /* write your code here */     into :county1,SALARY1,county2,SALARY2        Do  begin  --county = :ipic_y ;  county1 = :ipic_y  ;   -- i=i+1;  SUSPEND;  end  end^ SET TERM ; ^ GRANT EXECUTE ON PROCEDURE TRY TO  SYSDBA;



RE: مشكل في بناء استعلام أو اجراء متصمن - kito - 01-04-2016

يمكنني بكل سرور إعادة صياغة السؤال و البسط أكثر في حال كان الاستفسار غير مفهوم ،
هذه صورة توضيحية  لما أقصده ، و كل هذا العناء فقط من أجل بناء dataset  واحدة
أستخدمها  في التقرير في band  واحد ,

[صورة: 8584902016.png]



RE: مشكل في بناء استعلام أو اجراء متصمن - لؤي - 01-04-2016

السلام عليكم

لماذا لا تستعمل ثلاثة إستعامات ؟ لكل واحد يحتوي شرط السنة


RE: مشكل في بناء استعلام أو اجراء متصمن - kito - 02-04-2016

(01-04-2016, 11:33 PM)لؤي كتب : السلام عليكم

لماذا لا تستعمل ثلاثة إستعامات ؟ لكل واحد يحتوي شرط السنة

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

شكرا أستاذ لؤي على الاطلاع

ثلاث استعلامات =  ثلاث داتا ست
 المشكل أنّ  شكل الجداول بعد تحيينها للطباعة  يجب أن يكون عمودي  كل جدول سنة يجانب الجدول الذي يليه ... إلى غاية 5 جداول .
و  التقرير يقبل  داتا سات واحدة في الباند الواحد ، فلو كان إظهار الجداول بشكل عمودي لزال اللبس  باستخدام الطريقة التى تفضلتم بها .

ما أحتاجه و  عجزت عن تطبيقه هو استعلام ديناميكي أو إجراء متضمّن  أو  ربما  PIVOT  Huh  و التي لا فكرة لدي عن ماهيته
يقوم  إعادة ترتيب الجدول الذي أملك فيه المعطيات و الذي هو :
  year  | salary
......................  
   120  |  2005   
......................
  140   | 2005
......................
  150   | 2006
......................
   180  | 2006
...................
 188    | 2007
......................
   150  | 2007
......................
        

 إلى الشكل :
  year1|salary |year2|salary | year3|salary
  ..................................................................
    188 |  2007| 150    | 2006|   120  |2005
  ..................................................................
     150 |  2007| 180   | 2006|   140  |2005
.....................................................................

ما قصدته بالفصل  ليس  بالمعنى أن كل جدول منفصل عن الآخر بل اعادة الترتيب بهذا الشكل الأخير .

* استعلام ديناميكي : لأنّ السنوات 05 :
   ,min(year) +4   ..   min(year)


RE: مشكل في بناء استعلام أو اجراء متصمن - لؤي - 03-04-2016

السلام عليكم
ممكن ذلك بإستعمال Case الإستعلام التالي مجرب على Oracle :

Select (case year When 2005 Then Salary  Else null END) Year1,(case year When 2006 Then Salary  Else null END) Year2,(case year When 2007 Then Salary  Else null END) Year3 from My_table


RE: مشكل في بناء استعلام أو اجراء متصمن - kito - 03-04-2016

(03-04-2016, 10:53 AM)لؤي كتب : السلام عليكم
ممكن ذلك بإستعمال Case الإستعلام التالي مجرب على Oracle :

Select (case year When 2005 Then Salary  Else null END) Year1,(case year When 2006 Then Salary  Else null END) Year2,(case year When 2007 Then Salary  Else null END) Year3 from My_table

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

الطريقة جديدة علي و أول فرصة أغنم بها منكم .
جربتها  على الفايربيرد  و كانت النتيجة   مذهلة  ، سحقت دهاليز التعقيدات  التي كنت بصدد الغوص فيها  و التي قد لا تؤدي إلى نتيجة .
فقط لاحظت أن كل جدول يتكرر 4 مرات   حتى و إن جرّبت  السنة نفسها (ربما لأن عدد السنوات 04 ) رغم ذلك لم أكن لأطمع بأكثر من هذا.

جزاك الله كل خير و بارك الله لك في علمك  استاذ لؤي