اذهب إلى المحتوى

السؤال

نشر

أتوفر على جدول في قاعدة بيانات Sql كالتالي:

dbsize (id, database_name, database_size, insert_date) 

وعند عمل إستعلام Select أحصل على :

 - 1   dbname1   1000   1/1/1900
 - 2   dbname2   2000   1/1/1900 
 - 3   dbname3   3000   1/1/1900 
 - 4   dbname1   1200   1/2/1900 
 - 5   dbname2   2200   1/2/1900

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

- insert_date   dbname1  dbname2  dbname3
 - 1/1/1900      1000      2000     3000
 - 1/2/1900      1200      2200

كيفي يمكنني الحصول على هذه النتيجة؟ وما جملة الإستعلام التي يتوجب علي كتابتها لذلك؟

Recommended Posts

  • 0
نشر

هذا ما يسمى بـ pivot أي أنك تُغيّر من الشكل الطبيعي لظهور نتائج الجداول وتظهر بشكل مغاير تماما وكأنها جداول أخرى، حيث تستعمل هذه التقنية عند نشر احصائيات محددة، بشكل معين وفي حالات أخرى، وفي حالتك هذه إليك الحل:

DECLARE @ColumnNames nvarchar(MAX) = ''
DECLARE @SQL nvarchar(MAX) = ''

SELECT @ColumnNames += QUOTENAME( database_name) + ',' from (select distinct database_name from dbo.dbsize) t
SET @ColumnNames = LEFT(@ColumnNames, LEN(@ColumnNames)-1) 
SET @SQL = 'SELECT * FROM ( SELECT database_name, COUNT(*) AS cnt FROM dbsize GROUP BY database_name) AS basedata
            PIVOT ( SUM(cnt) FOR database_name IN (' +@ColumnNames + ')) AS PivotTable'
EXECUTE sp_execute

لاحظ جيدا استعمال الكلمةPIVOT .

يمكنك الإطلاع على المزيد حول هذا الموضوع، من خلال الموقع الرسمي لـ SQLServer:

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

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

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...