QuickBooks にアップロードされるレポートを作成しています。それぞれの計算が 1 回変更されるため、7 つのクエリすべてを UNION にする必要があります。以下は、最初の 2 つのクエリの例です。
SELECT
Clients.Id
,@CNumber as 'Check Number'
,@TDate as 'Transac Date'
,CONCAT(@Memo, 'Debt') as 'Memo'
,Compensation.Payment as 'Amount'
FROM Compensation
JOIN Clients on Id = Compensation.ClientId
UNION ALL
SELECT
Clients.Id
,@CNumber as 'Check Number'
,@TDate as 'Transac Date'
,CONCAT(@Memo, 'Insurance') as 'Memo'
,InsuranceInvoices.WeeklyAmount
FROM InsuranceInvoices
単一のユニオンごとに Clients.Id、@CNumber、@TDate、CONCAT(@Memo、Variable) を繰り返す必要をなくす方法はありますか?
「メモ」としての CONCAT(@MEMO, variable) の場合、おそらく配列を作成し、Union ALL の新しい反復ごとに挿入できます (それが可能かどうかはわかりません)。
私が立ち往生しているのは、「金額」の新しい計算ごとに、最初の 4 列を反復するループを作成する方法がわからないことです。
これは、最適化/コードの読みやすさのみを目的としています。クエリは機能し、それほど遅くはありません。しかし、これは 155 行の長さなので、次に同じようなことをするときは、別の方法でやってみることができるのではないでしょうか。
これまでに調査したこと: 次のスタック オーバーフローリンクは多少似ていますが、異なる「FROM」テーブルを使用していません。データは単一のテーブルから取得されます。私のデータは4つのテーブルから来ています。以下は、同じテーブルからの 2 つのクエリのサンプルです。
SELECT
Clients.Id
,@CNumber as 'Check Number'
,@TDate as 'Transac Date'
,CONCAT(@Memo, 'Debt') as 'Memo'
,Compensation.PaybackAmount as 'Amount'
FROM Compensation
JOIN Clients on Id = Compensation.ClientId
WHERE
Compensation.Week = @TrailingWeekEnd
UNION ALL
SELECT
Clients.Id
,@CNumber as 'Check Number'
,@TDate as 'Transac Date'
,CONCAT(@Memo, 'Vehicle') as 'Memo'
,Compensation.VDAccumulation as 'Amount'
FROM ContractorSettlements
JOIN Clients on Id = Compensation.ClientId
WHERE
Compensation.Week = @TrailingWeekEnd
これが悪い質問である場合は、申し訳ありません。私の考えでは、これがループ内で機能することを想像していますが、正直なところ、それを最適化する方法がわかりません。提供できる情報が他にある場合は、お知らせください。