Я часами борюсь с этой проблемой, хотя уверен, что есть простой ответ. Я пытаюсь собрать информацию за месяц и за текущий год из одной и той же таблицы. Я также присоединяюсь ко второй таблице, чтобы собрать название группы.
Таблица расходов:
+-----------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+----------------+
| id | int(5) | NO | PRI | NULL | auto_increment |
| account | char(14) | NO | | NULL | |
| batch | int(5) | NO | | NULL | |
| date | date | NO | | NULL | |
| description | varchar(50) | NO | | NULL | |
| debit | decimal(10,2) | NO | | NULL | |
| credit | decimal(10,2) | NO | | NULL | |
| account_data_id | varchar(14) | NO | | NULL | |
+-----------------+---------------+------+-----+---------+----------------+
account_data table:
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| id | int(5) | NO | PRI | NULL | auto_increment |
| account_code | varchar(14) | NO | | NULL | |
| group_name | varchar(30) | NO | | NULL | |
+--------------+-------------+------+-----+---------+----------------+
Я могу легко получить информацию за месяц или год до текущей даты, но, что бы я ни делал, я не могу получить и то, и другое. Ниже приведено самое близкое, что я могу придумать, но для выполнения требуется вечность, и результаты не такие, как ожидалось:
SELECT account_data.group_name, sum(m.debit)- sum(m.credit) AS month, sum(y.debit)- SUM(y.credit) AS year
FROM account_data
INNER JOIN expense m ON m.account_data_id = account_data.id
AND MONTH(m.`date`) IN (7,8,9,10,11,12)
LEFT JOIN expense y ON y.account_data_id = account_data.id
AND MONTH(y.`date`) IN (7)
GROUP BY account_data.group_name
Это то, чего я хочу достичь:
+--------------+----------+---------+
| group_name | month | year |
+--------------+----------+---------+
| Payroll | 10,000 | 50,000 |
| Payroll Tax | 1,000 | 5,000 |
| Benefits | 500 | 1,000 |
+--------------+----------+---------+
Любая помощь приветствуется. Я здесь новенький и надеюсь, что соблюдал все правила и предоставил любому из вас достаточно информации, чтобы помочь, но если нет, дайте мне знать, и я предоставлю больше.
@philwinkle -Ваше решение, правильно измененное:
SELECT ad.group_name,
IF(MONTH(e.date) IN (7,8,9,10,11,12), SUM(e.debit) - SUM(e.credit),'' ),
IF(MONTH(e.date) = 7, SUM(e.debit) - SUM(e.credit),'' )
FROM account_data ad
LEFT JOIN expense_2011 e ON e.account_data_id = ad.id
WHERE e.account_data_id > 7
GROUP BY ad.group_name