下面我解释一下我做什么和我需要什么,现在我留下一个目标表的方法和我使用的查询。
目标表(fact_accounting_lines):
id_producto | unds | compra_venta 10517931 | 2 | Compra 10517929 | 4 | Venta 10517929 | 2 | Venta 10517939 | 6 | Compra 10517931 | 3 | Venta
这是我的查询:
SELECT
fact_contabilidad_lineas.id_producto,
SUM(fact_contabilidad_lineas.unds) as unds,
fact_contabilidad.compra_venta
FROM fact_contabilidad, fact_contabilidad_lineas
WHERE fact_contabilidad_lineas.serie = concat_ws('-', fact_contabilidad.id_serie, fact_contabilidad.serie_num)
AND fact_contabilidad_lineas.iduser = 98
AND fact_contabilidad.iduser = 98
AND fact_contabilidad.compra_venta = 'Venta'
AND fact_contabilidad_lineas.id_producto > 10517927
GROUP BY fact_contabilidad_lineas.id_producto
结果:
id_producto | unds | compra_venta 10517929 | 6 | Venta 10517931 | 3 | Venta
我没有显示表格(fact_accounting),因为它没有必要,它不会影响我的问题,这样问题就更清晰了。查询工作正常,但它只让我得到了buy_sell = Sell 的行。
我需要得到的是:
1 列按 product_id和buy_sell = Sale分组的产品总和。
1 列按 product_id和buy_sell = Buy分组的产品总和。
预期结果:
id_producto | Venta | Compra 10517929 | 6 | 6 10517931 | 3 | 2
你能指导我吗?我想不出该怎么做。
你正在寻找这样的东西:
首先,请修改您的问题并将 SQL 中的数据传递给我们,这样更容易重现您的问题:
同样,如果您发现该表
fact_contabilidad
贡献不大,请将其从查询中删除。这样我们就不必修改它来进行测试:一旦在这一点上,我们可以帮助你。顺便说一句,很好,你已经把预期的结果。因此,我们已经能够看到您传递给我们的其中一个数据有错误:第四条记录以 39 而不是 29 结尾,请记住在您的数据集中对其进行修改以获得相同的结果。
现在,最后,SQL 的解释:你真的几乎拥有它,你用 ; 组成了组
GROUP_BY
和总数SUM
;唯一的缺陷是只选择销售而忽略购买。从您那里消除该条件WHERE
可能已经使用该功能IF
仅在每列中添加您感兴趣的内容。无论如何,我不是特别喜欢使用
IF
它,因为在某种程度上,你强迫自己阅读每个组中的所有记录。我更喜欢这样的东西:它似乎更长,但在它
compra_venta
有两个以上值的情况下,它会更有效。此外,它具有关系代数表示,而他IF
更像是程序员风格......如果有什么你看不清楚的,请在评论中给我留下疑问,我会根据需要扩展答案,因为这些功能中的每一个都有很多面包屑......
当你把结果放在那里时,你可以用这个查询得到它,我认为: