Поблем с запросом, чтобы получить различие - PullRequest
0 голосов
/ 17 сентября 2018

Я использую этот запрос, чтобы отобразить столбец Saldo со значениями счетов и платежей.Работает хорошо, но если у меня нет счета-фактуры, но у меня есть платеж, я могу увидеть его, пока не добавлю счет-фактуру.Как я могу исправить это?

select B.razonsocial as Empresa, Facturas , 
IFNULL(pay,0) as Pagos, (Facturas - IFNULL(pay,0)) Saldo 
FROM (select TblFacturasCompras.id_proveedor, TblProveedores.razonsocial, 
SUM(case when TblFacturasCompras.tipocomprobante = 'A' or TblFacturasCompras.tipocomprobante='B' or TblFacturasCompras.tipocomprobante = 'NDA' or TblFacturasCompras.tipocomprobante = 'NDB'  or TblFacturasCompras.tipocomprobante = 'C'  or TblFacturasCompras.tipocomprobante = 'NDC' or TblFacturasCompras.tipocomprobante = 'X' then TblFacturasCompras.total else -TblFacturasCompras.total end)  as Facturas 
from TblFacturasCompras left join TblProveedores on TblFacturasCompras.id_proveedor = TblProveedores.id group by TblProveedores.id) A 
LEFT JOIN (select TblProveedores.id, TblProveedores.razonsocial, SUM(TblRecibosCompras.total) as Pay from 
TblProveedores left join TblRecibosCompras on TblRecibosCompras.id_proveedor = TblProveedores.id  group by TblProveedores.id) B ON A.id_proveedor = B.id 
where B.razonsocial <> '' order by B.razonsocial Asc

1 Ответ

0 голосов
/ 17 сентября 2018

вы используете столбец, участвующий в левом соединении, в условии where

 where B.razonsocial <> '' 

эта работа в качестве внутреннего соединения пытается добавить условие в соответствующее условие on

select B.razonsocial as Empresa
    , Facturas
    , IFNULL(pay,0) as Pagos
    , (Facturas - IFNULL(pay,0)) Saldo 
    FROM (  
        select TblFacturasCompras.id_proveedor
            , TblProveedores.razonsocial
            , SUM(case when 
                        TblFacturasCompras.tipocomprobante = 'A' 
                        or TblFacturasCompras.tipocomprobante='B' 
                        or TblFacturasCompras.tipocomprobante = 'NDA' 
                        or TblFacturasCompras.tipocomprobante = 'NDB'  
                        or TblFacturasCompras.tipocomprobante = 'C'  
                        or TblFacturasCompras.tipocomprobante = 'NDC' 
                        or TblFacturasCompras.tipocomprobante = 'X' 
                    then TblFacturasCompras.total 
                    else -TblFacturasCompras.total end)  as Facturas 
        from TblFacturasCompras 
        left join TblProveedores on TblFacturasCompras.id_proveedor = TblProveedores.id 
        group by TblProveedores.id
    ) A 
    LEFT JOIN (
        select TblProveedores.id
            , TblProveedores.razonsocial
            , SUM(TblRecibosCompras.total) as Pay 
        from TblProveedores 
        left join TblRecibosCompras on TblRecibosCompras.id_proveedor = TblProveedores.id  
        group by TblProveedores.id
    ) B ON A.id_proveedor = B.id and  B.razonsocial <> '' 
    order by B.razonsocial Asc

ипредложение, в котором вы можете использовать предложение IN вместо нескольких предложений OR

select B.razonsocial as Empresa
    , Facturas
    , IFNULL(pay,0) as Pagos
    , (Facturas - IFNULL(pay,0)) Saldo 
    FROM (  
        select TblFacturasCompras.id_proveedor
            , TblProveedores.razonsocial
            , SUM(case when 
                  TblFacturasCompras.tipocomprobante IN ('A','B','NDA','NDB','C','NDC','X') 
                    then TblFacturasCompras.total 
                    else -TblFacturasCompras.total end)  as Facturas 
        from TblFacturasCompras 
        left join TblProveedores on TblFacturasCompras.id_proveedor = TblProveedores.id 
        group by TblProveedores.id
    ) A 
    LEFT JOIN (
        select TblProveedores.id
            , TblProveedores.razonsocial
            , SUM(TblRecibosCompras.total) as Pay 
        from TblProveedores 
        left join TblRecibosCompras on TblRecibosCompras.id_proveedor = TblProveedores.id  
        group by TblProveedores.id
    ) B ON A.id_proveedor = B.id and  B.razonsocial <> '' 
    order by B.razonsocial Asc
...