[英]SQL several inner joins cause wrong SUM Result
我的数据库示例:(底部的 SQLFiddle 链接)
我有几个表:
表登录
餐桌商务
ID_Login_ID_Business (int)
公司名称 (varchar)
姓名联系人(varchhar)
ID_Location_FK (int)
ID_BalancesheetInput_FK (int)
ID_资产负债表输出(整数)
表ID_资产负债表输入
身份证
FK_Business_ID (int)
资源名称 (varchar50)
金额(十进制)
Unit_Fk (int)
TypeOfRessource_FK(int)
表单位
单位编号
单位
表类型资源
ID_类型
类型
Sql 应该检查来自 Buisness 的所有条目,其中 ID_Login_ID_Business(fk) 等于 BalancesheetInput 中的 FK_Business_ID,用相同的 RessourceNam,e 对所有金额求和,并且应该简单地添加 typeofRessource 检查正确的单位。
示例:
餐桌商务
ID, NameOfCompany, ID_BalancesheetInput_FK
表资产负债表输入
ID、FK_Business_ID、资源名称、金额、Unit_FK、TypeOFRessource_FK
表单位
单位 ID,单位
表类型OF资源
ID_Type, 类型
以下语句尝试捕获所选业务的资源并计算具有相同名称的条目,例如电力。 他们属于一个公司,但出了点问题。
每次我使用我的 sql 语句时:
"SELECT DISTINCT "
. "BalancesheetInput.RessourceName AS Rn, "
. "Units.Unit AS En, "
. "SUM(BalancesheetInput.Amount) AS TotalAmount "
. "FROM Business"
. "INNER JOIN BalancesheetInput ON FK_Business_ID = 1 "
. "INNER JOIN Units ON Unit_FK = Unit_ID "
. "INNER JOIN TypeOfRessource ON TypeOf Ressources = 2 "
. "GROUP BY BalancesheetInput.RessourceName ");
结果:
轻质燃料油 60 kWh 能源 - 电力 600 kWh 能源 - 热能 2100 kWh
看起来他添加了每行的 6 倍。
我想要的结果是:
轻质燃料油 10 kWh 能源 - 电力 100 kWh 能源 - 热能 350 kWh
这是一个 SQLFiddle ,其中包含所有这些的工作版本。
如果您需要更多信息,只需说出您需要什么来帮助我解决问题。
它有助于为表使用别名。 还要在字段上创建适当的连接,而不是连接应该在 where 子句中的值。
最好确保 GROUP BY 包含您在选择中使用的所有字段(忽略函数中使用的字段)。
尤其是在使用 MySql 时。
SELECT
bs.RessourceName AS Rn,
u.Unit AS En,
SUM(bs.Amount) AS TotalAmount
FROM Business b
INNER JOIN BalancesheetInput bs ON bs.FK_Business_ID = b.ID
INNER JOIN Units u ON u.Unit_ID = bs.Unit_FK
INNER JOIN TypeOfRessource t ON t.ID_Type = bs.TypeOFRessource_FK
WHERE b.NameOfCompany = 'Apples'
AND bs.RessourceName = 'electricity'
GROUP BY bs.RessourceName, u.Unit
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.