質問

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を備えたストアドプロシージャが必要になる可能性があります...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top