Я просмотрел все, и, к сожалению, я не могу понять, что я делаю неправильно. Я разрабатываю приложение для управления личными финансами, которое использует сервер MySQL. Для этой проблемы у меня есть 4 таблицы, с которыми я работаю.
Таблица TRANSACTIONS
содержит столбцы CATID
и BILLID
, которые относятся к первичным ключам в таблицах SECONDARYCATEGORIES
и BILLS
. Обе таблицы TRANSACTIONS
и BILLS
имеют столбец PCATID
, который ссылается на первичный ключ в таблице PRIMARYCATEGORIES
.
Я создаю SQL-запрос, который суммирует столбец «сумма» в таблице TRANSACTIONS
и возвращает первичный ключ из PCATID
и сумму из всех записей, связанных с этим значением. Если BILLID
установлено в -1
, он должен найти PCATID
в SECONDARYCATEGORIES
, где SECONDARYCATEGORIES.ID = TRANSACTIONS.CATID
, в противном случае (поскольку -1
указывает, что это НЕ счет), он должен найти PCATID
из записи BILL
, где BILLS.ID
соответствует TRANSACTIONS.BILLID
.
Я ищу что-то вроде этого (очевидно, недействительный SQL):
SELECT
SECONDARYCATEGORIES.PCATID,
SUM(TRANSACTIONS.AMOUNT)
FROM
TRANSACTIONS
IF (BILLID = -1) JOIN SECONDARYCATEGORIES ON SECONDARYCATEGORIES.ID = TRANSACTIONS.CATID
ELSE JOIN SECONDARYCATEGORIES ON SECONDARYCATEGORIES.ID = BILLS.CATID WHERE BILLS.ID = TRANSACTIONS.BILLID
Я пробовал множество различных JOIN, операторов IF и т. д., и я просто не могу заставить эту работу работать. Я думал разбить это на разные SQL-запросы на основе значения BILLID
и суммировать значения, но мне бы очень хотелось сделать все это в одном SQL-запросе, если это возможно.
Я знаю, что здесь не хватает чего-то очевидного; любая помощь очень ценится.
Редактировать: я забыл описать таблицу BILLS. Он содержит основную категорию, идентификатор, а также некоторые описательные данные.