SQL Server从多个视图创建摘要视图的最佳方法

时间:2010-01-20 22:42:54

标签: sql sql-server views enterprise-manager

鉴于我有以下视图,其中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 ?我希望能够通过报告列表进行迭代并动态生成插入视图。

3 个答案:

答案 0 :(得分:1)

  

有没有办法创建summary_view_all_plants而无需创建每个个人的summary_view_N?

否 - 您必须定义视图使用的所有表和/或视图。

分层观点不是一种理想的做法。创始观点可以改变,打破相关的孩子。查询本身可能无法针对性能进行优化。

将值插入临时表意味着您必须删除现有记录或使用逻辑来相应地添加或更新。这也意味着必须定期执行此操作以保持同步。索引视图(AKA物化视图)可能是一种潜在的解决方案。

答案 1 :(得分:0)

我不确定插入视图的含义。

也许你正在寻找像这样的查询?

select Plant, count(*) as Count
from MyTable
group by Plant
order by Plant

我假设您的所有摘要视图都在访问同一个表MyTable。如果不是这种情况,您可能需要一个带有动态SQL的存储过程来生成您要查找的内容...

答案 2 :(得分:0)

找到了一个很好的解决方案。我有一个表格,其中包含我想要总结的视图的名称(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

添加新报告即可
相关问题