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

Pivot Query مجنني و مطلع عيني سلامة عيونكم يا خبراء :)

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

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

اخش بالموضوع :

سؤالي موضح بالمرفق.

عندي جدول يحوي على جميع الامتحانات المتعلقة بجميع المواد لجميع الطلاب . بمعنى كل سطر او سجل عبارة عن رقم الطالب رقم الامتحان درجة الامتحان رمز المادة التابع لها الامتحان.

اريد تحويل هذا الجدول بحيث يصبح رمز المادة عبارة عن اسم عمود و رقم الطالب لا يتكرر الا مرة واحدة كسجل بحيث مجموع درجات الامتحانات الخاصة برمز المادة مدون في العمود الخاص بالمادة و هكذا .....

انا تكمنت من عمل المطلوب اعلاه عندما اقوم بتزويد استعلام SQL برمز المواد في جملة الـ PIVOT و لكن مشكلتي يا اعزاء ان رموز المواد غير ثابتة يعني ممكن الان يوجد عشر مواد الاسبوع القادم يتم اضافة مادة جديدة بامتحانات جديدة و هكذا .......

قمت بتجربة العديد من الاكواد التي عثرت عليها على النت و لكن بدون فائدة .

ارجوا من سيقوم بالتكرم بالرد ان يراعي اني اريد الحل كـ SQL View لاني اريد ان اربطه مع كريستال ريبورت .

و تفضلوا بقبول فائق الاحترام

pivot.doc

M . O . H . ' . D. . . . . . . .G . H . A . L . I . B

e-mail : mumado99@hotmail.com

select * from dbo.my_friends where friend_desc in ('loyal','faithful','dedicated') order by priority_value

#3
TareqVB كتب:

السلام عليكم

Dynamic PIVOT in SQL Server 2005

او جوجل sql server dynamic pivot

أخي العزيز شكرا للرد و لك كامل احترامي طبعا و لكن كما اسلفت انا في الاعلى فإني جربت مثل هذه الطرق و نجحت معي كـ بروسيجر و لكن انا اريده كإستعلام view حيث انني اصمم تقرير بالكريستال ريبورت 12 و تقرير الكريستال ريبورت لا يمكن تغذيته الا عن طريق جدول او استعلام SQL server 2005 هذا على حد معلوماتي المتواضعة :blink:

ارجوا الافادة جزاكم الله كل الخير

M . O . H . ' . D. . . . . . . .G . H . A . L . I . B

e-mail : mumado99@hotmail.com

select * from dbo.my_friends where friend_desc in ('loyal','faithful','dedicated') order by priority_value

#4
mumado99 كتب:

أخي العزيز شكرا للرد و لك كامل احترامي طبعا و لكن كما اسلفت انا في الاعلى فإني جربت مثل هذه الطرق و نجحت معي كـ بروسيجر و لكن انا اريده كإستعلام view حيث انني اصمم تقرير بالكريستال ريبورت 12 و تقرير الكريستال ريبورت لا يمكن تغذيته الا عن طريق جدول او استعلام SQL server 2005 هذا على حد معلوماتي المتواضعة :blink:

ارجوا الافادة جزاكم الله كل الخير

لم اصل للحل بعد !!!

M . O . H . ' . D. . . . . . . .G . H . A . L . I . B

e-mail : mumado99@hotmail.com

select * from dbo.my_friends where friend_desc in ('loyal','faithful','dedicated') order by priority_value

#5

السلام عليكم

اذا وصلنا الى بروسجير نصل الى فيو بسهولة كمايلي :

create   procedure xxxx
as 

DECLARE @listCol VARCHAR(2000) 

DECLARE @query VARCHAR(4000) 

SELECT  @listCol = STUFF(( SELECT DISTINCT

                                '],[' + ltrim(str(YEAR(OrderDate)))

                        FROM    Sales.SalesOrderHeader

                        ORDER BY '],[' + ltrim(str(YEAR(OrderDate)))

                        FOR XML PATH('')



                                  ), 1, 2, '') + ']' 


SET @query ='IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N''dbo.Vxxx'') AND OBJECTPROPERTY(id, N''IsView'') = 1)
DROP VIEW  dbo.Vxxx '

 EXECUTE (@query);

SET @query =
' 


  create VIEW  dbo.Vxxx
		as
  SELECT * FROM

      (SELECT CustomerID, YEAR(OrderDate) OrderYear, SubTotal

            FROM Sales.SalesOrderHeader

            WHERE CustomerID >=1  ) src

PIVOT (SUM(SubTotal) FOR OrderYear

IN ('+@listCol+')) AS pvt' 

EXECUTE (@query);

go

لتنفيذ الكود

EXECUTE xxxx

 select * from  dbo.Vxxx

حيث يمكنك الحصول على النتائج من خلال الفيو Vxxx

بمعنى آخر في الكود عليك بعمل :

1- تنفيذ البروسيجر xxxx

2-تشغيل التقرير وبحيث يكون مرتبط مع الفيو Vxxx

وعليك باستخدام اسماء مناسبة بدل Vxxx و xxxx

#6

بارك الله لك فيما تملك يا اخ طارق

حتى قبل ان اجرب الكود اود ان اشكرك جزيل الشكر و التقدير و إن شاء الله ربنا يكتب التوفيق في تنفيذ الكود و أخلص من هالهم :) و إن شاء الله ابلغك بالنتائج

أخوك

محمد غالب

M . O . H . ' . D. . . . . . . .G . H . A . L . I . B

e-mail : mumado99@hotmail.com

select * from dbo.my_friends where friend_desc in ('loyal','faithful','dedicated') order by priority_value

#7
mumado99 كتب:

تقرير الكريستال ريبورت لا يمكن تغذيته الا عن طريق جدول او استعلام SQL server 2005 هذا على حد معلوماتي المتواضعة :blink:

من قال أن تقارير الكريستال ريبورت لا تستطيع أن يكون مصدر بياناتها Stored Procedure فتقارير الكريستال ريبورت ممكن أن يكون مصدر بيانتها

View or Stored Procedure or Table

أيضا اذا اردت تحقيق المطلوب وبمنتهي البساطة فيمكنك استخدام تقارير CrossTab من داخل الكريستال ريبورت فهذا النوع من التقرير هو المسؤول عن استخراج التقرير بالشكل الذي وضحتة بملف Word

post-46243-12740998835633_thumb.jpg

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 17 مايو 2010 في 15:45

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#8
محمد فؤاد تركي كتب:

من قال أن تقارير الكريستال ريبورت لا تستطيع أن يكون مصدر بياناتها Stored Procedure فتقارير الكريستال ريبورت ممكن أن يكون مصدر بيانتها

View or Stored Procedure or Table

أيضا اذا اردت تحقيق المطلوب وبمنتهي البساطة فيمكنك استخدام تقارير CrossTab من داخل الكريستال ريبورت فهذا النوع من التقرير هو المسؤول عن استخراج التقرير بالشكل الذي وضحتة بملف Word

post-46243-12740998835633_thumb.jpg

نعم كلامك صحيح اخ تركي و انا جربت الكروس تاب طبعا و اعطى النتائج بشكل صحيح و لكن لاحظت ان الكروس تاب غير مطواع من حيث وضع بصمات المبرمج على القرير ممكن يكون ذلك قلة خبرة منى ولكن على سبيل المثال لا يمكن ان اتحكم بترتيب الاعمدة

عموما في النهاية و بكثير من التحايل قمت بعمل الكروس تاب و لكن بصراحة النتيجة غير مقنعة

بالنهاية اشكر تفاعلكم اخواني

M . O . H . ' . D. . . . . . . .G . H . A . L . I . B

e-mail : mumado99@hotmail.com

select * from dbo.my_friends where friend_desc in ('loyal','faithful','dedicated') order by priority_value

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

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

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

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

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