鉴于我有以下图,其中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存储过程来产生你正在寻找...

什么
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top