3

18_8_ChartOfAccountsこのような口座番号を持つ最初のテーブル ( という名前)

AccountNumber | VatReturnRowNumberForDebitTurnover
--------------------------------------------------
 1            |    not_blank
 2            |
 3            |    not_blank

2 番目のテーブル ( という名前2_1_journal) はこのように

Amount | DebitAccount
----------------------
5     |  1
80    |  2
3     |  3
4     |  1
20    |  3

以下を取得しようとしています: if VatReturnRowNumberForDebitTurnoveris empty/not blank, sum Amountwhere DebitAccountis the same as (equal to) AccountNumber.

または、次のような出力を取得したい:

Account number | Total
---------------------------
1              | 9 (5+4)
3              | 23 (20+3)

アカウントが空白/空2であるため、アカウントの合計をエコーする必要はありません2 VatReturnRowNumberForDebitTurnover

この mysql クエリは、最初のテーブル ( )からすべての を選択します AccountNumber18_8_ChartOfAccounts

SELECT a.AccountNumber, IFNULL( d.Amount, 0 ) AS Amount 
FROM 18_8_ChartOfAccounts AS a 
LEFT JOIN ( SELECT DebitAccount, SUM( Amount ) AS Amount 
FROM ( SELECT * FROM 2_1_journal) DATA 
GROUP BY DebitAccount ) 
d ON (a.AccountNumber = d.DebitAccount)

ただし、空白/空でないAccountNumbersのみを選択する必要がありますVatReturnRowNumberForDebitTurnover

mysql クエリを変更しようとしています

SELECT a.AccountNumber, IFNULL( d.Amount, 0 ) AS Amount 
FROM 18_8_ChartOfAccounts AS a 

WHERE VatReturnRowNumberForDebitTurnover <> ''

LEFT JOIN ( SELECT DebitAccount, SUM( Amount ) AS Amount 
FROM ( SELECT * FROM 2_1_journal) DATA 
GROUP BY DebitAccount ) 
d ON (a.AccountNumber = d.DebitAccount)

得るSyntax error or access violation: ... near 'LEFT JOIN ( SELECT DebitAccount ....

その後変更FROM 18_8_ChartOfAccounts AS a WHERE VatReturnRowNumberForDebitTurnover <> ''

FROM 18_8_ChartOfAccounts WHERE VatReturnRowNumberForDebitTurnover <> '' AS a同様のエラーが発生します。

次に、次のようなコードに変更します。

SELECT a.AccountNumber, IFNULL( d.Amount, 0 ) AS Amount 
FROM 18_8_ChartOfAccounts AS a 
LEFT JOIN ( SELECT DebitAccount, SUM( Amount ) AS Amount 
FROM ( SELECT * FROM 2_1_journal) DATA 
WHERE a.VatReturnRowNumberForDebitTurnover <> "" 
GROUP BY DebitAccount ) 
d ON (a.AccountNumber = d.DebitAccount)

そして得るUnknown column 'a.VatReturnRowNumberForDebitTurnover'

テーブルに2_1_journalそのような列はありません。a.VatReturnRowNumberForDebitTurnoverと同じように使用したいa.AccountNumber(両方の列は . 作品のみであり、18_8_ChartOfAccounts.a.AccountNumber作品でa.VatReturnRowNumberForDebitTurnoverはありません。

何を修正する必要があるかアドバイスしてください

4

3 に答える 3

3

これは機能するはずです。

SELECT AccountNumber, 
       CONCAT(SUM(Amount), ' (', GROUP_CONCAT(Amount SEPARATOR '+'), ')') Total
FROM 18_8_ChartOfAccounts
LEFT JOIN 2_1_journal
  ON AccountNumber = DebitAccount
WHERE VatReturnRowNumberForDebitTurnover IS NOT NULL
GROUP BY AccountNumber

でテストする SQLfiddle

もちろん、合計の詳細が単なる例である場合は、そのGROUP_CONCAT()部分をスキップして使用することができます...

SELECT AccountNumber, COALESCE(SUM(Amount), 0) Total
...

別の SQLfiddle

于 2013-07-26T09:10:25.447 に答える
2

次のクエリを使用するだけです。

SELECT a.AccountNumber, SUM( b.Amount ) AS Amount
  FROM 18_8_ChartOfAccounts AS a 
     LEFT JOIN 2_1_journal AS b ON a.AccountNumber = b.DebitAccount
        WHERE a.VatReturnRowNumberForDebitTurnover IS NOT NULL
        GROUP BY b.DebitAccount;
于 2013-07-26T09:11:05.570 に答える
1
select
ca.AccountNumber,
sum(j.Amount)
from
18_8_ChartOfAccounts ca
left join 2_1_journal j on ca.AccountNumber = j.DebitAccount
where 
ca.VatReturnRowNumberForDebitTurnover is not null
group by ca.AccountNumber

sqlfiddleでライブで動作することを確認してください。

于 2013-07-26T09:11:37.920 に答える