さまざまなレポート用に作成した一連のビューがあります。それらは、5,000 件未満のレコードを返す最終ビューに向けて相互に構築されます。このビューを開くと、実行に 1 秒もかかりません。を追加するWHERE collumn IS NOT NULL
と、2分以上かかります。あまり頻繁に実行する必要のないレポートにはこれで問題ありませんが、毎週、毎日、時にはもっと頻繁に実行しなければならないレポートもあります。
私の解決策は、ビューのデータからテーブルを作成するストアド プロシージャを作成し、それをクエリすることでした。スケジュールされたレポートが自動的に起動する前にストアド プロシージャを実行するように設定しました。これは問題なく機能しますが、更新されたレポートを取得するたびにストアド プロシージャを手動で実行する必要があります。
より良い方法はありますか?
[MW_Submitted_ROY] を表示して、Submitted Weeks の財務を検索します。このビューは、アクティブなテーブルを静的テーブルの履歴データと結合します。静的テーブルのデータがアクティブ テーブルと同じ形式になるように調整しました。
SELECT oe_po_no, cus_no, user_def_fld_1, user_def_fld_2, tot_sls_amt
FROM MW_Submitted_Weeks_OldMacola
WHERE MW_Submitted_Weeks_OldMacola.oe_po_no LIKE 'adv%'
UNION
SELECT oe_po_no, cus_no, user_def_fld_1, user_def_fld_2, tot_sls_amt
FROM oehdrhst_sql
WHERE oehdrhst_sql.oe_po_no LIKE 'adv%'
[MW_Company_Weeks] を表示して、企業ごとに、今年度と前年度の財務報告を提出する可能性のあるすべての週を生成します。
SELECT MW.MW_Weeks.Year, MW.MW_Weeks.Week, MW.MW_CompanyCodes.cmp_code
FROM MW.MW_Weeks CROSS JOIN
MW.MW_CompanyCodes
WHERE (MW.MW_Weeks.WEDate <= GETDATE()) AND (MW.MW_Weeks.Year > YEAR(GETDATE()) - 2)
[MW_Submitted_Weeks_By_RBC_ROY] を表示すると、レポートを作成するために必要な会社に関する詳細情報がまとめられています
SELECT dbo.cicmpy.textfield2 AS [Group], dbo.cicmpy.cmp_code, dbo.cicmpy.cmp_name, dbo.cicmpy.cmp_fadd3 AS Owner, dbo.cicmpy.SalesPersonNumber,
MW.MW_Submitted_ROY.user_def_fld_1 AS Year, MW.MW_Submitted_ROY.user_def_fld_2 AS Week, MW.MW_Submitted_ROY.oe_po_no AS Description,
MW.MW_Submitted_ROY.tot_sls_amt
FROM dbo.cicmpy INNER JOIN
MW.MW_Submitted_ROY ON dbo.cicmpy.cmp_code = MW.MW_Submitted_ROY.cus_no
WHERE (dbo.cicmpy.cmp_code LIKE 'C%') AND (dbo.cicmpy.cmp_status = 'a') AND (dbo.cicmpy.cmp_type = 'C')
これにより、最後のビュー [MW_Missing_Weeks] が表示され、欠落している週と、提出された前年の財務報告の値が表示されます。これは、「is not null」を追加すると、永遠にかかる場所です。
SELECT MW.MW_Company_Weeks.Year, MW.MW_Company_Weeks.Week, MW.MW_Company_Weeks.cmp_code, bPrev.tot_sls_amt, bPrev.[Group], bPrev.cmp_name, bPrev.Owner,
bPrev.SalesPersonNumber, bPrev.Description
FROM MW.MW_Company_Weeks LEFT OUTER JOIN
MW.MW_Submitted_Weeks_By_RBC_ROY ON MW.MW_Company_Weeks.cmp_code = MW.MW_Submitted_Weeks_By_RBC_ROY.cmp_code AND
MW.MW_Company_Weeks.Year = MW.MW_Submitted_Weeks_By_RBC_ROY.Year AND MW.MW_Company_Weeks.Week = MW.MW_Submitted_Weeks_By_RBC_ROY.Week LEFT OUTER JOIN
MW.MW_Submitted_Weeks_By_RBC_ROY AS bPrev ON MW.MW_Company_Weeks.cmp_code = bPrev.cmp_code AND MW.MW_Company_Weeks.Year = bPrev.Year + 1 AND
MW.MW_Company_Weeks.Week = bPrev.Week
WHERE (MW.MW_Submitted_Weeks_By_RBC_ROY.cmp_code IS NULL) AND bPrev.tot_sls_amt IS NOT NULL