2010-01-20 72 views
1
摘要視圖的最佳方式

鑑於我有以下幾點看法,其中N = 1..100SQL Server創建從多個視圖

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?我希望能夠通過報表列表來動態生成插入視圖。

回答

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

0

我不確定你的意思是插入視圖

也許像這樣的查詢是你在找什麼?

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

我假設所有的摘要視圖都訪問同一張表MyTable。如果不是這種情況下,你可能會需要一個存儲過程中的一些動態SQL生成你在找什麼...

+0

很抱歉,如果說不清楚。我的意思是說,爲了創建最終的視圖summary_view_all_plants,中間視圖像summary_view_N插入到臨時表中。然後summary_view_all_plants只輸出該表格的角色。 – 2010-01-20 22:54:36

+0

@noel_g:你的意思是什麼意見插入臨時表..你在這裏混淆術語? – NotMe 2010-01-20 22:56:06

+0

請發佈您的基礎表架構。 – RedFilter 2010-01-20 23:58:11

1

有沒有一種方法,而無需創建每一個人summary_view_N創建summary_view_all_plants?

否 - 您必須定義視圖使用的所有表和/或視圖。

分層的意見不是一個理想的做法。創始人的觀點可以改變,打破有關的孩子。查詢本身可能不會針對性能進行優化。

將值插入臨時表意味着您必須刪除現有記錄或使用邏輯來相應地添加或更新。這也意味着這必須定期執行以保持同步。索引視圖,AKA物化視圖可能是一個潛在的解決方案。

+0

每次通過一組存儲過程運行summary_view_all_plants時,我們會刪除臨時表中的所有行(實際上有一個ASP前端我已經離開了討論)。不用說你對脆性的評價是正確的,性能不如想法。我繼承了這一點,並試圖讓它發揮最大作用。 我不知道索引視圖,但我的谷歌搜索告訴我,它可能無法正常工作,因爲底層數據發生變化,並且一些視圖具有非拒絕性列。性能不是什麼大問題,因爲它們每天在專用服務器上運行一次。 – 2010-01-21 00:46:36

+0

@noel_g:是的,可悲的物化觀點是臭名昭着的 – 2010-01-21 00:58:36

+0

爲OMG小馬+1。您必須定義表/視圖,並且一旦完成後,無需重新編譯彙總視圖即可更改任何基礎表或視圖。 – 2010-01-23 14:49:41