我已经看了一遍,不幸的是,我似乎无法弄清楚我做错了什么。我正在开发一个使用 MySQL 服务器的个人财务管理应用程序。对于这个问题,我正在使用 4 个表。
该TRANSACTIONS
表包含列CATID
,这些列引用和表BILLID
中的主键。和表都有一个引用表中主键的列。SECONDARYCATEGORIES
BILLS
TRANSACTIONS
BILLS
PCATID
PRIMARYCATEGORIES
我正在构建一个 SQL 查询,该查询对表中的“金额”列求和,并从与该值关联的所有记录中TRANSACTIONS
返回主键和总和。PCATID
如果BILLID
设置为-1
,它应该PCATID
在SECONDARYCATEGORIES
where 中找到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 表。它包含一个主要类别、ID 以及一些描述性数据。