SQL文の中で、LPAD という関数を使用しています。これは左側に特定の文字を埋めるための関数です。month が1桁の場合(例: 4月)、LPAD を使用して 04 という2桁の形式に変換します。その後、year と month を連結して日付形式に変換しています。
■PostgreSQL
SELECT section1, section2, TO_DATE(year || '-' || LPAD(month::text, 2, '0'), 'YYYY-MM') as converted_month, SUM(amount) as total_amount FROM workexpenses WHERE (section1 = 'C' AND section2 IN ('Z', 'Y', 'X')) GROUP BY section1, section2, converted_month ORDER BY section1, section2, converted_month;
SELECT section1, section2, STR_TO_DATE(CONCAT(year, '-', LPAD(month, 2, '0')), '%Y-%m') as converted_month, SUM(amount) as total_amount FROM workexpenses WHERE (section1 = 'C' AND section2 IN ('Z', 'Y', 'X')) GROUP BY section1, section2, converted_month ORDER BY section1, section2, converted_month;
【テストデータ作成用】
-- テーブルの作成 CREATE TABLE workexpenses_separated ( no SERIAL PRIMARY KEY, section1 CHAR(1), section2 CHAR(1), year INTEGER, month INTEGER, amount INTEGER ); -- テストデータの挿入 INSERT INTO workexpenses_separated (section1, section2, year, month, amount) VALUES ('C', 'Z', 2022, 4, 1000), ('C', 'Z', 2022, 5, 1500), ('C', 'Z', 2022, 6, 2000), ('C', 'Y', 2022, 4, 1200), ('C', 'Y', 2022, 5, 1300), ('C', 'X', 2022, 4, 1400), ('C', 'X', 2022, 6, 1700), ('D', 'W', 2022, 4, 900), ('D', 'W', 2022, 5, 800);