この SQL クエリをより効率的にするにはどうすればよいですか? 以下に示す CteFinal コードは、クエリに最大 6 分を追加したクエリの一部です。cteMonth を以下に示します。cteDetail は、データベースから情報を直接取得する別の cte であり、実行に 1 秒もかかりません。
CteFinal が行っているのは、f.FiscalPeriod=0 の行の列データの一部を含めながら、不足している会計期間の行を作成することです。
これは ERP データベースであり、これらの種類の変更を行うことは許可されていないため、テーブルのインデックスを追加、削除、または変更することはできません。
CteFinal:
SELECT Account,Month, CONVERT(DATETIME, CAST(@Year as varchar(4)) + '-' + CAST(Month as VARCHAR(2)) + '-' + '01', 102) JEDate
,accountdesc,'' Description,'' JournalCode,NULL JournalNum,NULL JournalLine
,'' LegalNumber,'' CurrencyCode,0.00 DebitAmount,0.00 CreditAmount,fiscalcalendarid,company,bookid,SegValue2,SegValue1,SegValue3,SegValue4
FROM cteDetail f
CROSS JOIN cteMonths m
WHERE f.FiscalPeriod=0 and not exists(select * from cteDetailADDCreatedZero x where x.Account=f.Account and x.FiscalPeriod=Month)
CteMonth:
cteMonths (Month) AS(
select 0 as Month
UNION select 1 as Month
UNION select 2 as Month
UNION select 3 as Month
UNION select 4 as Month
UNION select 5 as Month
UNION select 6 as Month
UNION select 7 as Month
UNION select 8 as Month
UNION select 9 as Month
UNION select 10 as Month
UNION select 11 as Month
UNION select 12 as Month)
ありがとうございました!