![]() |
|
مشكل في بناء استعلام أو اجراء متصمن - نسخة قابلة للطباعة +- 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و شكرا عفوا أظنني بترت جزءا من الكود و هاهو الكود كاملا :كود : 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 واحد ,
RE: مشكل في بناء استعلام أو اجراء متصمن - لؤي - 01-04-2016 السلام عليكم لماذا لا تستعمل ثلاثة إستعامات ؟ لكل واحد يحتوي شرط السنة RE: مشكل في بناء استعلام أو اجراء متصمن - kito - 02-04-2016 (01-04-2016, 11:33 PM)لؤي كتب : السلام عليكم و عليكم السلام و رحمة الله و بركاته شكرا أستاذ لؤي على الاطلاع ثلاث استعلامات = ثلاث داتا ست المشكل أنّ شكل الجداول بعد تحيينها للطباعة يجب أن يكون عمودي كل جدول سنة يجانب الجدول الذي يليه ... إلى غاية 5 جداول . و التقرير يقبل داتا سات واحدة في الباند الواحد ، فلو كان إظهار الجداول بشكل عمودي لزال اللبس باستخدام الطريقة التى تفضلتم بها . ما أحتاجه و عجزت عن تطبيقه هو استعلام ديناميكي أو إجراء متضمّن أو ربما PIVOT و التي لا فكرة لدي عن ماهيتهيقوم إعادة ترتيب الجدول الذي أملك فيه المعطيات و الذي هو : 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)لؤي كتب : السلام عليكم و عليكم السلام و رحمة الله و بركاته الطريقة جديدة علي و أول فرصة أغنم بها منكم . جربتها على الفايربيرد و كانت النتيجة مذهلة ، سحقت دهاليز التعقيدات التي كنت بصدد الغوص فيها و التي قد لا تؤدي إلى نتيجة . فقط لاحظت أن كل جدول يتكرر 4 مرات حتى و إن جرّبت السنة نفسها (ربما لأن عدد السنوات 04 ) رغم ذلك لم أكن لأطمع بأكثر من هذا. جزاك الله كل خير و بارك الله لك في علمك استاذ لؤي |