2017-04-01 14 views
0

2つのMySQLテーブルを持つプロジェクトがあります。1つのSQLクエリで複数のSQLクエリ結果を使用する

  • LedgerSchedule
  • 総勘定元帳

最初のテーブルLedgerScheduleは、総勘定元帳で使用される可能なタイプを含んでいます。 GeneralLedgerの各レコードは、(LedgerScheduleタイプの)CREDITまたはDEBITトランザクションにすることができます。

私はGeneralLedgerトランザクションでトランザクション調査を作成したいのですが、プロジェクトで3つのクエリを実行します。

  • 私は(DEBIT-CREDIT)を保存、この3件の問い合わせの後、各LedgerSchedule

各LedgerScheduleのための可能なLedgerScheduleの

  • 選択クレジットGeneralLedgers
  • 選択デビットGeneralLedgersを選択するには、バック各LedgerScheduleになります。 これは機能しますが、遅いです(特にLedgerScheduleが多い場合は特にそうです)。 物事をスピードアップするために、私は1つのMySQLクエリでこれを達成したいと思います。

    要約私は、1つのクエリでCREDIT/DEBITのGeneralLedgers金額でLedgerScheduleを選択します。

    最初の試み(この例では、私はLedgerScheduleからIDのみを選択します)。

    enter image description here

    しかし、これは、借方と貸方の取引でのみGeneralLedgersを選択します。これを

    WHERE LS.ID = DEBIT.ID 
    OR LS.ID = CREDIT.ID 
    

    に変更してください。これの次に、私はまた、LedgerScheduleをGeneralLedgers DEBIT/CREDITトランザクションなしで選択したいと思っています。

    | LedgerSchedule | Debit | Credit | 
    |  1  | €30.00 |   | 
    |  2  |   | €23.45 | 
    |  3  |   |   | 
    |  4  | €15.15 | €10.00 | 
    |  5  |   |   | 
    

    私はこれをどのように達成できますか?多分1つのクエリ内の複数の選択なし...

  • +0

    Jeeezすべてその総額は、あなたのSQL読むに痛みを行い、(列名など)SQL内の変数は、下ケースのみのコントロールであることを一般的な好みがあります"SELECT"のような言葉は大文字で、読みやすくなります.... – Martin

    +0

    同じ理由は、道路標識が大文字でないのも同じ理由で、大文字と小文字を理解するのは難しいブロック。 – Martin

    +0

    質問を編集し、サンプルデータと希望の結果を提供してください。 –

    答えて

    0

    私が正しく理解していれば、あなただけの条件付き集計をしたい:

    select gl.ledger_schedule_id, 
         sum(case when gl.debit_credit = 1 then gl.amount else - gl.amount 
          end) as net 
    from GeneralLedger gl 
    group by gl.ledger_schedule_id; 
    

    debit_creditが0または1以外の値を取ることができれば、あなたがしたいですよオーバーカウントを防ぐには、where句を使用します。

    あなたが金額をしたい場合は、別途:

    select gl.ledger_schedule_id, 
         sum(case when gl.debit_credit = 1 then gl.amount end) as credit, 
         sum(case when gl.debit_credit = 0 then gl.amount end) as debit 
    from GeneralLedger gl 
    group by gl.ledger_schedule_id; 
    
    +0

    それは良いアプローチのゴードンですが、各LedgerScheduleの合計を計算する前に、デビットとクレジットの金額を表示する必要があります。 照会の結果は、各LedgerScheduleのLedgerScheduleおよび借方および/または与信金額のすべてが使用可能である必要があります。 –

    +0

    実際、条件付き集計を使用するだけです:) –

    関連する問題