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

ربط View مع نفسها أربع مرات


jamal_rrkk

Recommended Posts

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

 

لقد قمت بربط view مع نقسها أربع مرات لإنشاء view تحتوي على آخر خمس سنوات مدخله بشكل عمودي كما يلي

رقم الحساب    اسم الحساب   مستوي الحساب  تصنيف الحساب    أرصدة آخر سنة 2015   2014   2013   2012    2011

 

وذلك حسب الكود التالي

أول view

create  or  replace view  v_bal_tree_y (numc , yer , num , nam , intree , de_cr , vd_vc ) as 
select  numc , yer , num , nam ,
(case when num < 10 then 'الرئيسي'
when num > 10 and num < 1000 then 'الأول'
when num > 1000 and num < 100000 then 'الثاني'
when num > 100000 and num < 10000000 then 'الثالث'
when num > 10000000 then 'الرابع'   end) ,
(case when de_cr = 1 then 'مدين'  when de_cr = 2 then 'دائن' end) , (vd-vc)
from v_bal_tree
order by numc , num ;

ثاني view تحوي على الربط

create  or  replace view  v_bal_tree_yf (numc, num, nam, intree, de_cr, yer1, yer2 ,yer3 ,yer4 ,yer5 ) as 
select  y1.numc, y1.num, y1.nam, y1.intree , y1.de_cr, 
nvl(y1.vd_vc,0), nvl(y2.vd_vc,0), nvl(y3.vd_vc,0), nvl(y4.vd_vc,0), nvl(y5.vd_vc,0)
from v_bal_tree_y y1 , v_bal_tree_y  y2 , v_bal_tree_y  y3 , v_bal_tree_y  y4 , v_bal_tree_y  y5
where
y1.yer = ( select max(yer) from v_bal_tree_y ) and 
y1.numc = y2.numc(+)  and  y1.num = y2.num(+)  and  y1.yer-1 = y2.yer(+)  and
y1.numc = y3.numc(+)  and  y1.num = y3.num(+)  and  y1.yer-2 = y3.yer(+) and
y1.numc = y4.numc(+)  and  y1.num = y4.num(+)  and  y1.yer-3 = y4.yer(+) and
y1.numc = y5.numc(+)  and  y1.num = y5.num(+)  and  y1.yer-4 = y5.yer(+)
order by y1.num ;

OR

create  or  replace view  v_bal_tree_yff (numc, num, nam, intree, de_cr, yer1, yer2 ,yer3 ,yer4 ,yer5 ) as 
select  y1.numc, y1.num, y1.nam, y1.intree , y1.de_cr, 
nvl(y1.vd_vc,0), nvl(y2.vd_vc,0) , nvl(y3.vd_vc,0), nvl(y4.vd_vc,0), nvl(y5.vd_vc,0)
from v_bal_tree_y y1
LEFT JOIN v_bal_tree_y  y2  ON (y1.numc = y2.numc and  y1.num = y2.num and  y1.yer-1 = y2.yer)
LEFT JOIN v_bal_tree_y  y3  ON (y1.numc = y3.numc and  y1.num = y3.num and  y1.yer-2 = y3.yer)
LEFT JOIN v_bal_tree_y  y4  ON (y1.numc = y4.numc and  y1.num = y4.num and  y1.yer-3 = y4.yer)
LEFT JOIN v_bal_tree_y  y5  ON (y1.numc = y5.numc and  y1.num = y5.num and  y1.yer-4 = y5.yer)
where
y1.yer = ( select max(yer) from v_bal_tree_y)
order by y1.num ;

لقد حاولت استخدام FULL JOIN و FULL OUTER JOIN لإظهار جميع الدتا وكان يحصل الخطأ التالي

 

ORA-01790

ORA-01790expression must have same datatype as corresponding expression

Cause:A SELECT list item corresponds to a SELECT list item with a different datatype in another query of the same set expression.

Action:Make sure all corresponding SELECT list items have the same datatypes. The functions TO_NUMBER, TO_CHAR, and TO_DATE can be used to do explicit data conversions.

 

هل يمكن كتابة الكود السابق بطريقة ثانيه مع إحضار جميع البيانات أو إحضار نفس البيانات

 

جزاكم الله خيرا

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

 

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

 

أخي الكريم

 

اذا كان قصدك أن اكتب الكود التالي


create or replace view v_bal_tree_yu (numc, yer,num, nam, intree, de_cr, yer1, yer2 ,yer3 ,yer4 ,yer5 ) as
select numc , yer , num , nam , intree , de_cr , vd_vc , 0 , 0 , 0 , 0
from v_bal_tree_y
where yer = ( select max(yer) from v_bal_tree_y)
union all
select numc , yer , num , nam , intree , de_cr , 0, vd_vc , 0 , 0 , 0
from v_bal_tree_y
where yer = ( select max(yer-1) from v_bal_tree_y)
union all
select numc , yer , num , nam , intree , de_cr , 0, 0 , vd_vc , 0 , 0
from v_bal_tree_y
where yer = ( select max(yer-2) from v_bal_tree_y)
union all
select numc , yer , num , nam , intree , de_cr , 0, 0 , 0 ,vd_vc , 0
from v_bal_tree_y
where yer = ( select max(yer-3) from v_bal_tree_y)
union all
select numc , yer , num , nam , intree , de_cr , 0, 0 , 0 , 0 , vd_vc
from v_bal_tree_y
where yer = ( select max(yer-4) from v_bal_tree_y) ;

ومن ثم أربط  view مع نفسها يكون استرجاع الدتا بطئ جدا

 

مرفق صوره للشاشة المصممة

 

جزاك الله خيرا

ارصدة الحسابات.doc

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

يا ريت ال structure بتاع الجداول و insert statements لو سمحت
اظنك تقصد انك عايز النتايج بشكل افقى لان عندك عمود شايل السنين متهيالى ؟
ملحوظة : اسماء الجداول لا يفهم منها شئ

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

 

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

 

أخي الكريم eslam elbyaly  جزاك الله خيرا

 

فعلا لم أوضح أسماء الحقول في الـ view وذلك كان خطأ مني

 

أول view

 

numc : رقم الشركة

yer: السنة المالية ( تحتوي على جميع السنوات المالية المدخلة )

num : رقم الحساب

nam : اسم الحساب

intree : المستوي حسب شجرة الحسابات

de_cr : تصنيف الحساب مدين أو دائن

vd_vc : رصيد الحساب

 

ثاني view

numc : رقم الشركة

num : رقم الحساب

nam : اسم الحساب

intree : المستوي حسب شجرة الحسابات

de_cr : تصنيف الحساب مدين أو دائن

yer1 : أرصدة الحسابات لآخر سنه مالية مدخله مثلا 2015

yer2 : أرصدة الحسابات  للسنة المالية 2014

yer3 : أرصدة الحسابات  للسنة المالية 2013

yer4 : أرصدة الحسابات  للسنة المالية 2012

yer5 : أرصدة الحسابات  للسنة المالية 2011

 

وذلك حسب الصورة المرفقة سابقا

 

البرنامج هو برنامج لتدقيق حسابات الشركات ولم انتهي من تصميمه

حيث يتم سحب الدتا من خلال ملف اكسل لشاشة ميزان المراجعة ومن ثم يتم حفظها في جدول ميزان المراجعة

 

مرفق ملفات تحتوي على الجداول المرتبطة بالكود أعلاه

كما تم إرفاق شاشة معدله لميزان المراجعة بحيث يتم سحب البيانات من ملف الأكسل مصممه بـ  10g

 

 جزاكم الله خيرا

auditproa.rar

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

مبدايا ، غلط جدا انك تسمى اسماء مبهمة لاى اوبجكت .
لو كل سنة عندك ليها عمود ، جرب ال scalar subquery
Select ...from table where year =2013 , ( select .....where year =2014)

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

 

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

 

أخي الكريم eslam elbyaly

 

اكتب لنا الكود حسب الحقول أعلاه بحيث يتم إظهار آخر خمس سنوات مدخله

 

جزاكم الله خيرا

 

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

  • بعد 2 أسابيع...

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

 

تم تعديل الكود السابق كما يلى

create  or  replace view  v_bal_tree_yf (numc, num, nam, intree, de_cr, yer1, yer2 ,yer3 ,yer4 ,yer5 ) as
select  y1.numc, y1.num, y1.nam, y1.intree , y1.de_cr ,
nvl(y1.vd_vc,0), nvl(y2.vd_vc,0), nvl(y3.vd_vc,0), nvl(y4.vd_vc,0), nvl(y5.vd_vc,0)
from  v_bal_tree_y y1 , v_bal_tree_y  y2 , v_bal_tree_y  y3 , v_bal_tree_y  y4 , v_bal_tree_y  y5 ,
(select  max(yer) yer , numc  from v_bal_tree_y group by  numc) yy 
where  yy.yer = y1.yer and  yy.numc = y1.numc  and
y1.numc = y2.numc(+)  and  y1.num = y2.num(+)  and  y1.yer-1 = y2.yer(+) and
y1.numc = y3.numc(+)  and  y1.num = y3.num(+)  and  y1.yer-2 = y3.yer(+) and
y1.numc = y4.numc(+)  and  y1.num = y4.num(+)  and  y1.yer-3 = y4.yer(+) and
y1.numc = y5.numc(+)  and  y1.num = y5.num(+)  and  y1.yer-4 = y5.yer(+)
order by y1.num ;  

جزاكم الله خيرا 

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

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

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

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

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

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

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

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