SQL Server أفضل طريقة لإنشاء عرض ملخص من طرق عرض متعددة
-
21-09-2019 - |
سؤال
بالنظر إلى أن لدي العرض التالي حيث ن = 1..100
detail_view_N
Pant Quantity Fieldx ...
A 20
A 13
B 4
حاليًا لدينا طرق عرض موجزة تدخل على جدول مثل
summary_view_N
Report_Name Plant Count
summary_view_1 A 2
summary_view_1 B 1
ثم يتم استخدام الجدول لإنشاء ملخص شامل مثل
summary_view_all_plants
Report_Name Plant Count
summary_view_1 A 2
summary_view_1 B 1
...
summary_view_N X Y
هل هناك طريقة لإنشاء summary_view_all_plants دون الحاجة إلى إنشاء كل فرد summary_view_n؟ أرغب في أن أكون قادرًا على الإثارة على الرغم من قائمة التقارير وإنشاء طرق عرض الإدراج ديناميكيًا.
المحلول 3
وجدت حل جيد لهذا. لدي جدول يحمل أسماء المشاهدات التي أريد تلخيصها (التفاصيل _view_names). أعتقد أن كل تقرير تقرير وإنشاء استعلام يؤدي ملخص كل تقرير.
DECLARE @REPORT_ID nvarchar(50),
@sqlCommand varchar(1000)
DECLARE REPORT_cursor CURSOR
FOR SELECT Report_Name
FROM detail_view_Names
OPEN REPORT_cursor
FETCH NEXT FROM REPORT_cursor INTO @REPORT_ID
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sqlCommand = 'SELECT ''' + @Report_ID + ''' AS ReportName, Plant, COUNT(*) AS [Count] FROM dbo.' + @Report_ID + ' GROUP BY Plant'
EXEC (@sqlCommand)
FETCH NEXT FROM REPORT_cursor INTO @REPORT_ID
END
CLOSE REPORT_cursor
DEALLOCATE REPORT_cursor
لإضافة تقرير جدي
نصائح أخرى
هل هناك طريقة لإنشاء summary_view_all_plants دون الحاجة إلى إنشاء كل ملخص فردي_فيو_n؟
لا - عليك تحديد جميع الجداول و/أو المشاهدات التي تستخدمها طريقة العرض.
وضع وجهات النظر ليس ممارسة مثالية. يمكن أن يتغير وجهة نظر التأسيس ، وكسر الأطفال ذوي الصلة. تستفسر الاستعلامات نفسها لا يتم تحسينها للأداء.
يعني إدراج القيم في جدول مؤقت أن يتعين عليك إزالة السجلات الحالية أو استخدام المنطق لإضافة أو تحديث وفقًا لذلك. وهذا يعني أيضًا أنه يجب تنفيذ هذا بشكل دوري للحفاظ على متزامن. قد تكون طريقة العرض المفهرسة ، المعروفة أيضًا باسم العرض الملقب ، حلاً محتملًا.
لست متأكدًا مما تقصده إدراج عرض.
ربما يكون الاستعلام مثل هذا هو ما تبحث عنه؟
select Plant, count(*) as Count
from MyTable
group by Plant
order by Plant
أفترض أن جميع وجهات النظر الموجزة تصل إلى نفس الجدول ، MyTable
. إذا لم يكن هذا هو الحال ، فمن المحتمل أن تحتاج إلى إجراء مخزن مع بعض SQL الديناميكي لإنشاء ما تبحث عنه ...