MySQLを使っています。 こういう出費と入金のテーブルがあったとします。 TABLE1 (in) date, amount, code TABLE2 (out)

MySQL61閲覧

ベストアンサー

0

ThanksImg質問者からのお礼コメント

みなさんのありがたい教え、感謝します。 一番短いSQL文を紹介していただいた方にBA差し上げます

お礼日時:6/2 12:42

その他の回答(2件)

0

>日付がどうとかエラーになります。 他人にアドバイスを求めるのですから、 重要な情報です。面倒くさがらずに、具体的に提示するようにしてください。 英単語をそのまま表名や列名に使用する場合は、予約語と被ってしまい構文エラーになってしまう場合があります。 MySQLなら`code`のように「`」(バッククオート)で囲むようにしてください。 MySQL8ではcodeやnameは予約語になっており、今の環境で動いているものが、環境が変われば動かなくなります。 SELECT `code` ,yyyymm ,SUM(`amount`) AS 収支 FROM ( SELECT 'IN' AS id ,`date` ,`amount` ,`code` ,DATE_FORMAT(`date`,'%Y-%m') AS yyyymm FROM TABLE1 UNION ALL SELECT 'OUT' ,`date` ,-`amount` ,`code` ,DATE_FORMAT(`date`,'%Y-%m') FROM TABLE2 ) AS x GROUP BY `code`,yyyymm ORDER BY `code`,yyyymm ;

最初に提示したSELECT文はMySQL8では動作したのですが、MySQL5では結果が返されず原因を時間がある時に調べようと思います。 MySQL5で動作確認できたSELECT文を、改めて提示します。 SELECT code ,EXTRACT(YEAR_MONTH FROM date) AS yyyymm ,SUM(amount) FROM ( SELECT date,amount,code FROM TABLE1 UNION ALL SELECT date ,-amount ,code FROM TABLE2) AS x GROUP BY code,yyyymm ORDER BY code,yyyymm ;