0

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

これが悪い質問である場合は、申し訳ありません。私の考えでは、これがループ内で機能することを想像していますが、正直なところ、それを最適化する方法がわかりません。提供できる情報が他にある場合は、お知らせください。

4

1 に答える 1