これは MySQL テーブルの一部です
Amount | DebitAccount | RecordYear | RecordMonth | RecordDay
MySQL クエリではRecordYear,RecordMonth,RecordDay
、 に変更する必要がありますDATE
。
多くのアドバイスに基づいて、そのような機能するコードを取得します(コードは、どのように機能するかを確認するための例としてのみ示しています)
SELECT * FROM
(SELECT *
, CAST(CONCAT_WS('-', RecordYear,RecordMonth,RecordDay) AS DATE) RecordDate , CAST(CONCAT_WS('-', DocumentYear,DocumentMonth,DocumentDay) AS DATE) DocumentDate
FROM 2_1_journal) DATA
WHERE RecordDate <> ? AND DocumentDate = ?
ORDER BY RecordDate DESC
このコードは、テーブルからすべてを選択し、区切られた整数を として変更/変換し、RecordDate
に基づいてデータを提供しWHERE
ます。
これも例としてのみ2番目の作業コードです
SELECT a.AccountNumber,
IFNULL( d.Amount, 0 ) - IFNULL( c.Amount, 0 ) AS Amount
FROM 18_7_ChartOfAccounts AS a
LEFT JOIN (
SELECT DebitAccount,
SUM( Amount ) AS Amount FROM 2_1_journal WHERE
CAST(RecordDay AS UNSIGNED) != ? AND CAST(RecordMonth AS UNSIGNED) != ? AND CAST(RecordYear AS UNSIGNED) != ?
GROUP BY DebitAccount
) d ON (a.AccountNumber = d.DebitAccount)
CAST(RecordDay AS UNSIGNED) != ? AND CAST(RecordMonth AS UNSIGNED) != ? AND CAST(RecordYear AS UNSIGNED) != ?
2番目のコードのこの部分が必要です
, CAST(CONCAT_WS('-', RecordYear,RecordMonth,RecordDay) AS DATE) RecordDate , CAST(CONCAT_WS('-', DocumentYear,DocumentMonth,DocumentDay) AS DATE) DocumentDate
最初のコードのこの部分に変更します。
このようなコードを作成しました
SELECT a.AccountNumber,
IFNULL( d.Amount, 0 ) - IFNULL( c.Amount, 0 ) AS Amount
FROM 18_7_ChartOfAccounts AS a
LEFT JOIN (
SELECT DebitAccount,
SUM( Amount ) AS Amount ,
CAST(CONCAT_WS('-', RecordYear,RecordMonth,RecordDay) AS DATE) RecordDate , CAST(CONCAT_WS('-', DocumentYear,DocumentMonth,DocumentDay) AS DATE) DocumentDate
FROM 2_1_journal
WHERE RecordDate = ?
GROUP BY DebitAccount
) d ON (a.AccountNumber = d.DebitAccount)
/*below code is for purpose to show whole code*/
LEFT JOIN ( SELECT CreditAccount, SUM( Amount ) AS Amount , CAST(CONCAT_WS('-', RecordYear,RecordMonth,RecordDay) AS DATE) RecordDate , CAST(CONCAT_WS('-', DocumentYear,DocumentMonth,DocumentDay) AS DATE) DocumentDate FROM 2_1_journal WHERE RecordDate = ? GROUP BY CreditAccount ) c ON (a.AccountNumber = c.CreditAccount)
出力でこのエラーが発生しますSQLSTATE[42S22]: Column not found: 1054 Unknown column 'RecordDate' in 'where clause'
理解CAST(CONCAT_WS('-', RecordYear,RecordMonth,RecordDay) AS DATE) RecordDate , CAST(CONCAT_WS('-', DocumentYear,DocumentMonth,DocumentDay) AS DATE) DocumentDate
しているように、他の場所に配置する必要があります。しかし、どこ?DATA
おそらく、最初の例のように追加する必要があります。
コードは理解できないように見えるかもしれませんが、必要なものを取得するためのコードです。ご意見をお聞かせください。
アップデート
アドバイスに基づいてコードを変更
SELECT
a.AccountNumber,
IFNULL( d.Amount, 0 ) - IFNULL( c.Amount, 0 ) AS Amount
FROM 18_7_ChartOfAccounts AS a
LEFT JOIN (
SELECT * FROM (
SELECT DebitAccount,
SUM( Amount ) AS Amount ,
CAST(CONCAT_WS('-', RecordYear,RecordMonth,RecordDay) AS DATE) RecordDate,
CAST(CONCAT_WS('-', DocumentYear,DocumentMonth,DocumentDay) AS DATE) DocumentDate
FROM 2_1_journal) DATA
WHERE RecordDate = 2013-01-20
GROUP BY DebitAccount
) d ON (a.AccountNumber = d.DebitAccount)
テーブルの日付が2013-01-20の行であることはわかっています。しかし、出力結果は0でエラーはありません。
おそらくコードの私の過失ミス....
コードは MySQL テーブルの最初の行でのみ日付をチェックするという結論に達しました。最初の行の日付がユーザーの入力と一致する場合、コードは column のすべての値を合計しますAmount
。一致しない場合、結果は 0 です。
更新 1
最終的にこれは作業コードのようです。現時点では、出力は期待どおりです。できれば改善案をお願いします
SELECT
a.AccountNumber,
IFNULL( d.Amount, 0 ) - IFNULL( c.Amount, 0 ) AS Amount
FROM 18_7_ChartOfAccounts AS a
LEFT JOIN (
SELECT DebitAccount,
SUM( Amount ) AS Amount FROM
( SELECT * , CAST(CONCAT_WS('-', RecordYear,RecordMonth,RecordDay) AS DATE) RecordDate , CAST(CONCAT_WS('-', DocumentYear,DocumentMonth,DocumentDay) AS DATE) DocumentDate FROM 2_1_journal) DATA
WHERE
RecordDate = ?
GROUP BY DebitAccount
) d ON (a.AccountNumber = d.DebitAccount)
LEFT JOIN (
SELECT CreditAccount,
SUM( Amount ) AS Amount FROM
( SELECT * , CAST(CONCAT_WS('-', RecordYear,RecordMonth,RecordDay) AS DATE) RecordDate , CAST(CONCAT_WS('-', DocumentYear,DocumentMonth,DocumentDay) AS DATE) DocumentDate FROM 2_1_journal) DATA
WHERE
RecordDate = ?
GROUP BY CreditAccount
) c ON (a.AccountNumber = c.CreditAccount)