我有3个表:DefMatiere,其中包含项目的名称和表格成分,其中包含已使用的数量和StockData,其中包含已购买的数量及其值。
我写了这个查询,用于获取使用和购买的物品和数量的名称以及支付的金额。
SELECT dm.nom, SUM(IF(dm.id=ig.matid, ig.qty, 0)) AS used,
SUM(DISTINCT IF(dm.id=sd.matid ,sd.quantite,0)) AS achete,
SUM(DISTINCT IF(dm.id=sd.matid ,sd.montant*(1+(sd.tvaval/100)) ,0)) AS val,
(SUM(DISTINCT IF(dm.id=sd.matid ,sd.quantite,0))- SUM(IF(dm.id=ig.matid, ig.qty, 0))) AS restant
FROM DefMatiere AS dm
LEFT JOIN ingredient AS ig ON ig.matid=dm.id
LEFT JOIN StockData AS sd on sd.matid = dm.id
WHERE dm.type = 1 GROUP BY dm.nom
这给了我想要的东西,但它似乎是一个非常长的烦恼的罗马。
是否可以使用别名进行这些计算LIKE achete - val AS restant
因为我想添加val / achete *使用val / achete * restant在这种情况下我的查询变得像RINGS 6卷的LORD。
或者我必须继续写我的罗马?任何帮助都会教我
[编辑]
然而,在输入更多数据后,我发现此查询不正确。
因为如果在StockData中有多个具有相同matid的行,则我使用的结果会根据行数加倍或三倍。
HERE查询结果和我找到的解决方案
HERE就是我解决的问题。但我找不到合适的查询。
答案 0 :(得分:0)
我认为你的问题相对简单,但并不是那么简单,我想坐下来为你编写SQL。
但是既然你要求接受教育,我认为这很好,我认为从长远来看这将是最有帮助的:
我认为编写SQL(以及学习编写SQL)的最佳方法不是从头开始,而是使用带有向导的更强大的图形SQL工具。我使用Microsoft Access 2003,但还有许多其他SQL工具可用。在这样的工具上,您可以轻松设置模型,链接和查询并总结您心中的喜悦。
当我在php中构建困难的查询时,我经常首先在SQL图形用户界面中对查询进行建模,然后一旦我得到了我想要的总数,我就保存了生成的SQL并将其插入到php中。