SQL Server最佳方式来创建多个视图摘要视图
-
21-09-2019 - |
题
鉴于我有以下图,其中N = 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 吗?我想能够itterate虽然报告的列表,并动态地生成所述插入意见。
解决方案 3
实测值很好地解决了这一点。我持有的,我想总结(detail_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
要一个新的报告添加到概要,只需添加一个新的报告到detail_view_Names
其他提示
有一种方法,而无需创建每个单独summary_view_N创建summary_view_all_plants?
没有 - 必须定义所有的图中使用的表和/或视图
。分层的观点是不理想的做法。创始视图可以改变,这违反有关儿童。查询本身的风险没有被优化的性能。
将值插入必须删除现有记录,或者采用逻辑添加或相应地更新一个临时表的装置。这也意味着,这必须定期进行,以保持同步。索引视图,AKA物化视图,可能是一个可能的解决方案。
我不知道你的意思的插入图的。
也许这样的查询是你在找什么?
select Plant, count(*) as Count
from MyTable
group by Plant
order by Plant
我假设你所有的摘要视图访问相同的表,MyTable
。如果不是这种情况下,你可能会需要一些动态SQL存储过程来产生你正在寻找...
不隶属于 StackOverflow