我在MySQL中有这样一个查询:
SELECT
a.IdFactura,
(sum((a.Precio_sinIVA*a.Cantidad)-(a.Descuento/(1+a.IVA_Tipo)))) AS SUM,
(1-((b.Descuento_Cliente * 1.0)/100.00)) As DESCUENT,
(sum((a.Precio_sinIVA*a.Cantidad)-(a.Descuento/(1+a.IVA_Tipo)))) * (1-((b.Descuento_Cliente * 1.0)/100.00)) As Base_Imponible
FROM Lineas_Facturas a
LEFT JOIN Facturas b ON a.IdFactura = b.IdFactura
GROUP BY a.IdFactura然后查询返回,例如:
a.IdFactura SUM DESCUENT Base_Imponible
655 29.75 0.9 26.77 (OK)但是,当我将此查询包含到视图中并运行它时,视图将返回,例如:
a.IdFactura SUM DESCUENT Base_Imponible
655 29.75 0.9 29.65 (WRONG)我只想乘以SUM * DESCUENT,在查询中结果是可以的,但是当我将它包含到视图中时,结果就不同了。
问题出在哪里?有人能帮我吗?
更新:
我仔细地检查了MySQL视图和SQL,当我保存视图时,查询的括号更改了,有些被删除了。保存在视图中的查询如下:
SELECT
a.IdFactura,
sum(a.Precio_sinIVA*a.Cantidad-a.Descuento/(1+a.IVA_Tipo)) AS SUM,
1-b.Descuento_Cliente * 1.0/100.00 As DESCUENT,
sum(a.Precio_sinIVA*a.Cantidad-a.Descuento/(1+a.IVA_Tipo)) * 1-b.Descuento_Cliente * 1.0/100.00 As Base_Imponible
FROM Lineas_Facturas a
LEFT JOIN Facturas b ON a.IdFactura = b.IdFactura
GROUP BY a.IdFactura我已经检查了查询代码,除了2(字段开头和结尾处的括号)之外,DESCUENT字段中的所有家长都可以:
(1-b.Descuento_Cliente * 1.0/100.00) As DESCUENT,如果没有这两个括号,“Base_Imponible”字段中的所有计算都是不正确的。有什么主意吗?
发布于 2020-03-28 19:40:57
我已经用CTE解决了这个问题。SQL视图是:
WITH cte AS (
SELECT
Lineas_Facturas.IdFactura AS IdFactura,
(sum(Precio_sinIVA*Cantidad-Descuento/(1+IVA_Tipo))) AS SUMA,
(1-Facturas.Descuento_Cliente * 1.0/100.00) AS DISCOUNT
from Lineas_Facturas
LEft Join Facturas ON Lineas_Facturas.IdFactura = Facturas.IdFactura
GROUP BY Lineas_Facturas.IdFactura
)
SELECT IdFactura, (SUMA*DISCOUNT) AS Base_Imponible
FROM cte非常感谢。
瓦迪安
发布于 2020-03-29 11:23:22
当将普通列与聚合函数混合时,必须使用GROUP BY。GROUP BY应该包含来自SELECT的普通列。
您的a.IdFactura和b.Descuento_Cliente列不在聚合函数中,因此您应该将这些列包含在GROUP BY中。在默认情况下,较早的MySQL版本允许这样做,您可能会将变量结果视为结果(与括号无关)。
要查看查询是否正确,可以显示一些示例代码和所需的结果。
https://stackoverflow.com/questions/60904771
复制相似问题