这是我在Stackoverflow上的第一篇文章,因为我不知道如何处理这个问题。
首先,我要原谅我糟糕的英语。
现在,我想给你一个我的数据库的例子。 (底部的SQLFiddle链接)
我有几张表:
表登录
表商家
ID_Login_ID_Business(int)
NameOfCompany(varchar)
NameContact(varchhar)
ID_Location_FK(int)
ID_BalancesheetInput_FK(int)
ID_Balancesheetoutput(int)的
表 ID_BalancesheetInput
ID
FK_Business_ID(int)
RessourceName(varchar50)
金额(十进制)
Unit_Fk(int)
TypeOfRessource_FK(int)的
表格单位
UNIT_ID
单元
表 TypeOfRessource
ID_TYPE
类型
现在我尝试解释我想要做什么,以及如何显示结果。
Sql应检查来自Buisness的所有条目,其中ID_Login_ID_Business(fk)等于BalancesheetInput中的FK_Business_ID,并使用相同的RessourceName对所有金额求和,并且应该简单地添加typeofRessource并检查正确的单位。
示例:
表商家
ID,NameOfCompany,ID_BalancesheetInput_FK
表格 BalancesheetInput
ID,FK_Business_ID,RessourceName,Amount,Unit_FK,TypeOFRessource_FK
表格单位
单位ID,单位
表 TypeOFRessource
ID_Type,类型
有以下声明我尝试捕获选择业务的资源并计算具有相同名称的条目,例如电力属于一家公司,但出现问题。
每次我使用我的sql Statment:
"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千瓦时 能源 - 电力600千瓦时 能源 - 热能2100千瓦时
看起来他增加了每行数量的6倍。
我想要的结果是什么:
轻质燃油10千瓦时 能源 - 电力100千瓦时 能源 - 热能350千瓦时
Here is an SQLFiddle以及所有这些的工作版本。
也许有些人可以帮助我摆脱这种苦难。
如果您需要进一步的信息,请说出您需要帮助我解决问题的方法。
先谢谢了!
答案 0 :(得分:1)
提示:如果您在JOIN上选择*,则see它为每个BalancesheetInput创建一个包含六行的表格;每个组合的公司名称和能源类型。我们使用WHERE来缩小重复的行。这通常比SELECT DISTINCT更好。
此外,"螺丝"被错误归类为" Energie"而不是" Materiel"。
答案 1 :(得分:0)
有助于为表使用别名。还要在字段上创建正确的连接,而不是连接应该在where子句中的值。
最好确保GROUP BY包含您在select中使用的所有字段(忽略函数中使用的字段)。
特别是在使用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