Проблема в MySQL Просмотр с LEFT JOIN ... GROUP BY - PullRequest
0 голосов
/ 28 марта 2020

У меня есть запрос в 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)

Но когда я включаю этот запрос в VIEW и Я запускаю его, VIEW возвращает, например:

a.IdFactura   SUM    DESCUENT   Base_Imponible
655           29.75  0.9        29.65 (WRONG)

Я хочу только умножить SUM * DESCUENT, и в запросе результат в порядке, но когда я включаю его в VIEW, результат будет другим.

Где проблема ?. Может ли кто-нибудь помочь мне, пожалуйста?

ОБНОВЛЕНО:

Я внимательно рассмотрел 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

Я рассмотрел код запроса и могу обойтись без всего парентеза в поле DESCUENT, кроме 2 (скобки в начале и конце поля):

(1-b.Descuento_Cliente * 1.0/100.00) As DESCUENT,

Без этих двух скобок все вычисления в поле ' Base_Imponible ' неверны. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Когда вы смешиваете обычные столбцы с агрегатными функциями, вы должны использовать GROUP BY. GROUP BY должен содержать обычные столбцы из вашего SELECT.

У вас есть столбцы a.IdFactura и b.Descuento_Cliente, которые не находятся внутри статистической функции, поэтому вы должны включить их в GROUP BY. Более старые версии MySQL допускали это по умолчанию, и вы могли бы видеть переменный результат как результат (ничего общего с круглыми скобками).

Чтобы увидеть, верен ли запрос в противном случае, вы можете показать пример кода и желаемый результат .

0 голосов
/ 28 марта 2020

Я решил проблему с помощью 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

Большое спасибо.

Wardiam

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...