0

次の2つのクエリがあります。

SELECT 
    account_name,SUM(amount) AS AMOUNT1 
FROM 
    entries 
LEFT JOIN 
    accounts ON accounts.id = entries.accounts_id
WHERE 
    side = 'D' AND op_balance_dc = 'D'
GROUP BY 
    accounts.id

クエリの結果は次のとおりです。

Query1

SELECT 
    account_name,SUM(amount) AS AMOUNT2 
FROM 
    entries 
LEFT JOIN 
    accounts ON accounts.id = entries.accounts_id
WHERE 
    side = 'C' AND op_balance_dc = 'D'
GROUP BY 
    accounts.id

これが2番目のクエリの結果です

Query2

上記の2つのクエリの結果を表示しようとはしていません。達成しようとしているのは、上記のクエリからaccount_name、AMOUNT1、およびAMOUNT2を取得し、Amount2 FROM AMOUNT1-を減算して、テーブルの列から値を加算することです。

例:

(AMOUNT1-AMOUNT2)+op_balance  //here op_balance is my column name

次にaccount_name(AMOUNT1-AMOUNT2)+op_balance

この質問を手伝ってくれませんか。

ありがとう :)

さらに情報が必要な場合はお知らせください。:)

編集済み

これが私のテーブルの構造です:

ありがとう :)

Edit2

テーブル名:エントリ(ケース1)

  id    trans_id   accounts_id    amount    side
   1      1       12               1000      D
   2      1        1               1000      C
   7      4        1              14000      D
   8      4        2              14000      C

テーブル名:エントリ(ケース2)

  id    trans_id   accounts_id  amount        side
  1           1       12          1000       D
  2           1        1          1000       C

コードはケース1では機能しますが、ケース2では機能しません。あなたlentries.accounts_id = entries.accounts_idはあなたのコードで使用しました、そしてそれは結合するテーブルに同じもののための複数の値accounts_idがなく、あなたのコードがケース2の値を数えないので理由です。

しかし、私はすべてのデータを取得しようとしています。ありがとう :)

4

2 に答える 2

2

これがすべてのアカウントの編集されたクエリです

select
  a.id,
  a.account_name,
  a.op_balance,
  ifnull(e.AMOUNT1,0) as Amount1,
  ifnull(l.AMOUNT2,0) as Amount2,
  ((ifnull(SUM(e.AMOUNT1),0)-ifnull(l.AMOUNT2,0))+a.op_balance) as Balance
from accounts a
  left join (SELECT
               accounts_id,
               SUM(amount)     AS AMOUNT1
             FROM entries
               LEFT JOIN accounts
                 ON accounts.id = entries.accounts_id
             WHERE entries.side = 'D'
                 AND accounts.op_balance_dc = 'D'
             GROUP BY accounts.id) as e
    on e.accounts_id = a.id
  left join (SELECT
               accounts_id,
               SUM(amount)     AS AMOUNT2
             FROM entries
               LEFT JOIN accounts
                 ON accounts.id = entries.accounts_id
             WHERE side = 'C'
                 AND op_balance_dc = 'D'
             GROUP BY accounts.id) as l
    on l.accounts_id = a.id
group by a.id   
于 2012-06-15T07:48:47.377 に答える
2
SELECT
    a.account_name,
    a.AMOUNT1,
    b.AMOUNT2,
    (a.AMOUNT1 - COALESCE(b.AMOUNT2, 0)) + a.op_balance AS calculated
FROM
    (
        SELECT accounts.id, account_name, SUM(amount) AS AMOUNT1, op_balance
        FROM entries 
        LEFT JOIN accounts ON accounts.id = entries.accounts_id
        WHERE side='D' AND op_balance_dc='D'
        GROUP BY accounts.id
    ) a
LEFT JOIN
    (
        SELECT accounts.id, SUM(amount) AS AMOUNT2 FROM entries 
        LEFT JOIN accounts ON accounts.id = entries.accounts_id
        WHERE side='C' AND op_balance_dc='D'
        GROUP BY accounts.id
    ) b ON a.id = b.id
GROUP BY
    a.id
于 2012-06-15T06:49:35.470 に答える