الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

امر يساعد في المقارنة لسنوات

بدأه الحلفاوي في 15 فبراير 2012 · 16 رد · 844 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عودٌ على بدء .............. التعليمات المعقدة انوه هنا الى انه يمكن الرجوع الى السؤال (حساب النسبة المئوية) حت تتضح الصورة

1- لدينا الان امر لاستجلاب نسب النجاح والرسوب والغياب

2- ولدينا امر لتقسيم نسب النجاح وايجاد مجموع الطلاب الذين احرزوا نسبهم في المدى

فماذا لو طلب منا ايجاد نفس الاوامر لعدة سنوات بحيث لا تكون السنوات للترتيب بها او بمعنى الا تكون في Order by clouse ولكن تكون موجودة في قائمة الحقول المستعلم عنها انظر الى هذا الخرج الافتراضي

50 , >=90  , 2009 - 2010 *****,60 , >= 90 , 2010 - 2011 ****** , 70 , >=90 , 2011 - 2012

63 , 80 - 90  , 2009 - 2010***** ,60 , 80 - 90 , 2010 - 2011 ,****** 70 , 80 - 90 , 2011 - 2012

50 , 50 - 60  , 2009 - 2010 *****,60 , 50 - 60 , 2010 - 2011 ,*****70 , 50 - 60 , 2011 - 2012

افترض للجدول السابق وجود حقل يسمى العام الدراسي

سلمكم الله

تم تعديل هذه المشاركة بواسطة الحلفاوي في 15 فبراير 2012 في 10:26

#2

السلام عليكم.

هل الخرج الافتراضي الذي وضعته هو خرج ل 3 استعلامات ؟

و هل حقل العام الدراسي يكون بالشكل: 2009-2010 ؟

#3

وعليكم السلام

اما الاستعلام فهو استعلام واحد

واما حقل العام الدراسي فهو Int في الجدول الاساسي بحيث ان الاستعلام من View ذو صلة

جوزيتم

#4

ممكن توضح

#5
KARIMSOFT كتب:

ممكن توضح

السلام عليكم

هب ان لديك جدول قاعدة بيانات للبضاعة من حقولها حقل لسنوات(تكتب 2010 فقط) الاستيراد بغض النظر عن تاريخ الاستيراد (افتراضاً) وتود ان تعرف كميه البضاعة التي بيعت في هذه السنه حتى هنا لا اجد صعوبة وهو امر مقدور عليه , ولكن السؤال هل من سبيل الى امر يمكنني ان اعرف كمية البضاعة التي بيعت لعدة سنوات بحيث تكون مخرجاتها ضمن Selection cluase ولا تكون حقلا للترتيب بها او التجميع بها

بكلمات اخرى اذا اردت عرض تقرير رسومي (مدرجات) لعدة سنوات لا تحتاج لعدة اوامر سيكوال كل واحد منها مخصصة لـDataSet و DBChart object خاصة بها , ولكن باستخدام DBChart object فقط بحيث تكون قيمة X عبارة عن السنوات وقيمة Y عبارة عن الكمية

بوركتم

تم تعديل هذه المشاركة بواسطة الحلفاوي في 16 فبراير 2012 في 09:21

#6

أخي إذا كان الخرج المطلوب يجب أن يكون من استعلام واحد, فلماذا يتم إظهار >=90 أكثر من مرة في كل سطر ؟

#7
Adel Khayata كتب:

أخي إذا كان الخرج المطلوب يجب أن يكون من استعلام واحد, فلماذا يتم إظهار >=90 أكثر من مرة في كل سطر ؟

يمكنك تعديل الفكرة الى جعل >=90 تكتب مرة واحدة على ان تكون الحقول المتغيره كالسنة الدراسية وعدد الطلاب هي الي تتغير على السطر

خالص الامتنان لكم

#8
الحلفاوي كتب:

يمكنك تعديل الفكرة الى جعل >=90 تكتب مرة واحدة على ان تكون الحقول المتغيره كالسنة الدراسية وعدد الطلاب هي الي تتغير على السطر

قرات للتو من مشاركة بعنوان عدة اسئلة .......... فهل سيكون الحل من باب الـ Pivot ؟

خالص الامتنان لكم

#9

استخدم ما يسمي بالpivot table

انظر المثال

SELECT FORM_TYPE,FK_GOVERNORATEID,FK_POLICE_STATID,FK_DISTRICTID, [1] AS Cat1, [2] AS Cat2, [3] AS Cat3, [4] AS Cat4
FROM 
(SELECT FORM_TYPE,FK_GOVERNORATEID,FK_POLICE_STATID,FK_DISTRICTID,nCategory,nCount
FROM dbo.vCategoryNew) p
PIVOT
(
sum (nCount)
FOR nCategory IN
( [1], [2], [3], [4] )
) AS pvt
ORDER BY FORM_TYPE,FK_GOVERNORATEID,FK_POLICE_STATID,FK_DISTRICTID
#10
KARIMSOFT كتب:

استخدم ما يسمي بالpivot table

انظر المثال

SELECT FORM_TYPE,FK_GOVERNORATEID,FK_POLICE_STATID,FK_DISTRICTID, [1] AS Cat1, [2] AS Cat2, [3] AS Cat3, [4] AS Cat4
FROM 
(SELECT FORM_TYPE,FK_GOVERNORATEID,FK_POLICE_STATID,FK_DISTRICTID,nCategory,nCount
FROM dbo.vCategoryNew) p
PIVOT
(
sum (nCount)
FOR nCategory IN
( [1], [2], [3], [4] )
) AS pvt
ORDER BY FORM_TYPE,FK_GOVERNORATEID,FK_POLICE_STATID,FK_DISTRICTID

السلام عليكم

قمت بهذه المحاولة

 Select 'Result Average' as InYear ,[0] as Year1,[1] as Year2,[2] as Year3,[3] as Year4,[4] as Year5 ,[5] as Year6
from (Select Year_name_desc, Result_digree  from general_set) as pv
Pivot(
Avg(Result_digree)
for Year_name_desc in
([0],[1],[2],[3],[4],[5])
)as pivottable;

فكانت النتيجة

الصف الاعلى به Inyears يتبعه عدد من الاعمدة الست الموضحة في الكود

الصف الذي يليه به Result Average ولكن كل قيم الاعمدة كانت Nulls فما السبب؟

علما بان هذا الكود من قاعدة البيانات تعمل جيدا وتعطي نتائج لمتوسطات 6 سنوات

 Select AVG(Result_digree) ,Year_name_Desc from general_set group by Year_name_desc

جوزيتم

#11

غير هذا السطر ([0],[1],[2],[3],[4],[5])

الي ارقام السنين كذلك هذا السطر

[0] as Year1,[1] as Year2,[2] as Year3,[3] as Year4,[4] as Year5 ,[5] as Year6

#12
KARIMSOFT كتب:

غير هذا السطر ([0],[1],[2],[3],[4],[5])

الي ارقام السنين كذلك هذا السطر

[0] as Year1,[1] as Year2,[2] as Year3,[3] as Year4,[4] as Year5 ,[5] as Year6

السلام عليكم

تم لي ما اردته بالضبط ......... شكر الله لكم

و الآن سؤالان

1- كيف تصنع اذا ان تجعل العمود الواحد يحتمل اكثر من معلومة كمتوسط شيئ ما اضافة الى نوع الشيء معه , فاذا كان لديك خمس سنوات سيكون عدد الاعمدة 10

2- الترقيم الذي بين الاقواس المربعة هل من وسيلة لتغييرها ديناميكيا , اقصد زيادتها او انقاصها حسب عدد سنوات المقارنة المطلوبة (في مثال السؤال)

جوزيتم

#13

اولا: عمل جملتين PIVOT بينهم JOIN

ثانيا:ليس مابين الاقواس تريقيم بل هي القيم المرا الاستعلام عنها فيمكن ان تكون سبين متفرقة

#14

السلام عليكم

اشكرك اخي ما استطعت فهم السطر الثاني فما الذي تقصده ؟

ما زلت اسال هل يمكن جعل عدد الاعمدة قابلة للتغيير حسب امر الاستعلام ام ليست هنالك ثمة طريقة الا حجز الاعمدة في كود Static على ان تكون المخرجات Null اذا لم توجد؟

#15

ابحث عن مفنهوم PIVOT

انظر الرابط

الرابط الخاص بي

#16

السلام عليكم

اشكرك اخي كريم جداً , ممتاز هذا ما اردته بالضبط عن Dynaamic pivot وان لم اجربه بعد

اسال الله ان يجازيك خيراً وبوركت

#17

اكرمك الله

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…