【问题标题】:Poblem with Query to Get Diference查询获取差异的问题
【发布时间】:2018-09-17 15:47:10
【问题描述】:

我正在使用此查询来显示带有发票和付款值的 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

【问题讨论】:

  • 请添加最低限度的样本数据,以显示您的查询不起作用的情况。同时分享预期的输出和你的查询得到的输出!
  • 例如,我有表格发票和表格付款,关系是由供应商在两个表格中建立的。我必须检查有多少付款,发票和显示差异,如果我在同一供应商的每张桌子上都有一个注册表,效果很好,但如果我只有付款,没有发票,我无法得到结果。
  • 我已经用 Right Join 解决了

标签: mysql payment relation invoices


【解决方案1】:

您在 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

【讨论】:

  • 您好,感谢您的回复,我想我的问题在这里:ON A.id_proveedor = B.id,因为 A.id_proveedor 永远不会 > 0,因为发票不存在。
  • 您已尝试过您的代码,但没有成功。我得到了相同的结果。
  • 您的评论不清楚..您是说您在 from 表中没有和 id 并希望与左表连接.. 解释得更好。然后是适当的数据样本,您实际的结果和预期的结果是有用的
  • 例如,我有表格发票和表格付款,关系是由供应商在两个表格中建立的。我必须检查有多少付款,发票和显示差异,如果我在同一供应商的每张桌子上都有一个注册表,效果很好,但如果我只有付款,没有发票,我无法得到结果。
  • 已通过右连接解决。谢谢。
猜你喜欢
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-19
  • 2011-08-22
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多