私はQuickBooksにアップロードされるレポートを作成しています。私は、それぞれ1つの計算の変更のために、すべての7つのクエリを結合する必要があります。以下は、最初の2つのクエリの例です:繰り返しユニオンを最適化するすべてのSSMSクエリ
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、変数)を繰り返す必要を排除する方法はあります?「メモ」としてCONCAT(@MEMO、変数)については
、私はおそらく(それも可能かどうかわからない)の配列を作成し、すべての連合の各新しい反復に挿入することができます。
私は、「Amount」のそれぞれの新しい計算で、最初の4列を反復するループを作成する方法がわかりません。
これは、最適化/コードの可読性のためだけです。しかし、それは155行で、次回同じようなことをやろうとすれば、違うやり方でやり直すことができるのだろうかと思う。
これまでに調査した内容:次のスタックオーバーフローlinkは多少似ていますが、異なる '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
これは悪い質問ですが、私の謝罪です。私の考えでは、これはループ内での作業を想像していますが、それを最適化する方法は正直に分かりません。私が提供できる情報が他にもある場合は、私に知らせてください。間違った構文のにもかかわらず
役立ちます:' Compensation.PaymentからのID = Compensation.ClientId'にクライアントを登録しよう。あなたの質問にコードを修正してください。 –
編集ありがとうございます。私は、投稿する前にクエリを修正しなければならなかった。 –