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?レポートのリストを介して反論し、挿入ビューを動的に生成することができます。
解決 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を作成する方法はありますか?
いいえ - ビューで使用されるすべてのテーブルおよび/またはビューを定義する必要があります。
ビューを重ねることは理想的な習慣ではありません。設立ビューが変化し、関連する子供を壊す可能性があります。クエリ自体は、パフォーマンスに最適化されないリスクがあります。
値を一時テーブルに挿入することは、既存のレコードを削除するか、ロジックを使用してそれに応じて追加または更新する必要があることを意味します。また、これを定期的に同期させるために実行する必要があることも意味します。インデックス化されたビュー(別名実現ビュー)は、潜在的な解決策かもしれません。
あなたが何を意味するのかわかりません ビューを挿入します.
おそらく、このような質問はあなたが探しているものですか?
select Plant, count(*) as Count
from MyTable
group by Plant
order by Plant
私はあなたのすべての要約ビューが同じテーブルにアクセスしていると仮定しています、 MyTable
. 。そうでない場合は、探しているものを生成するために、動的なSQLを備えたストアドプロシージャが必要になる可能性があります...