我的数据库的一个例子:(底部的SQLFiddle链接)
我有几张桌子:
表登录
表业务
表 ID_BalancesheetInput
表单元
表 TypeOfRessource
Sql应该检查来自Buisness的所有条目,其中ID_Login_ID_Business(fk)等于BalancesheetInput中的FK_Business_ID,所有金额之和都是相同的RessourceNam,e,并且应该简单地添加检查正确单位的typeofRessource。
示例:
表业务
ID,NameOfCompany,ID_BalancesheetInput_FK
表 BalancesheetInput
ID,FK_Business_ID,RessourceName,Amount,Unit_FK,TypeOFRessource_FK
表单元
单位ID,单位
表 TypeOFRessource
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提供了所有这些的工作版本。
如果你需要更多的信息,就说出你需要帮助我解决问题的东西。
发布于 2016-05-22 18:14:32
我和Luk风暴得出了同样的答案,这是我做的SQLFiddle。
提示:如果您在JOIN上选择*,您将发现它正在为每个看见创建一个包含六行的表;为每个公司名称和能源类型的组合创建一个表。我们用什么地方缩小重复行的范围。这通常比选择不同的要好。
此外,“螺丝”被错误地归类为"Energie“而不是"Materiel”。
发布于 2016-05-22 17:54:19
它有助于为表使用别名。还可以在字段上创建适当的联接,而不是连接应该在where子句中的值。
最好确保GROUP拥有在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.Unithttps://stackoverflow.com/questions/37377040
复制相似问题