poblem与查询获取差异

sauutmhj  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(386)

我使用这个查询来显示saldo列以及发票和付款值。工作很好,但如果我没有发票,但我有一个付款,我可以看到它,直到我添加一个发票。我怎样才能纠正它?

  1. select B.razonsocial as Empresa, Facturas ,
  2. IFNULL(pay,0) as Pagos, (Facturas - IFNULL(pay,0)) Saldo
  3. FROM (select TblFacturasCompras.id_proveedor, TblProveedores.razonsocial,
  4. 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
  5. from TblFacturasCompras left join TblProveedores on TblFacturasCompras.id_proveedor = TblProveedores.id group by TblProveedores.id) A
  6. LEFT JOIN (select TblProveedores.id, TblProveedores.razonsocial, SUM(TblRecibosCompras.total) as Pay from
  7. TblProveedores left join TblRecibosCompras on TblRecibosCompras.id_proveedor = TblProveedores.id group by TblProveedores.id) B ON A.id_proveedor = B.id
  8. where B.razonsocial <> '' order by B.razonsocial Asc
inb24sb2

inb24sb21#

您正在where条件中使用左连接所涉及的列

  1. where B.razonsocial <> ''

这是一个内部连接,请尝试将条件添加到相关的on子句中

  1. select B.razonsocial as Empresa
  2. , Facturas
  3. , IFNULL(pay,0) as Pagos
  4. , (Facturas - IFNULL(pay,0)) Saldo
  5. FROM (
  6. select TblFacturasCompras.id_proveedor
  7. , TblProveedores.razonsocial
  8. , SUM(case when
  9. TblFacturasCompras.tipocomprobante = 'A'
  10. or TblFacturasCompras.tipocomprobante='B'
  11. or TblFacturasCompras.tipocomprobante = 'NDA'
  12. or TblFacturasCompras.tipocomprobante = 'NDB'
  13. or TblFacturasCompras.tipocomprobante = 'C'
  14. or TblFacturasCompras.tipocomprobante = 'NDC'
  15. or TblFacturasCompras.tipocomprobante = 'X'
  16. then TblFacturasCompras.total
  17. else -TblFacturasCompras.total end) as Facturas
  18. from TblFacturasCompras
  19. left join TblProveedores on TblFacturasCompras.id_proveedor = TblProveedores.id
  20. group by TblProveedores.id
  21. ) A
  22. LEFT JOIN (
  23. select TblProveedores.id
  24. , TblProveedores.razonsocial
  25. , SUM(TblRecibosCompras.total) as Pay
  26. from TblProveedores
  27. left join TblRecibosCompras on TblRecibosCompras.id_proveedor = TblProveedores.id
  28. group by TblProveedores.id
  29. ) B ON A.id_proveedor = B.id and B.razonsocial <> ''
  30. order by B.razonsocial Asc

还有一个建议,你可以用一个in子句而不是几个or子句

  1. select B.razonsocial as Empresa
  2. , Facturas
  3. , IFNULL(pay,0) as Pagos
  4. , (Facturas - IFNULL(pay,0)) Saldo
  5. FROM (
  6. select TblFacturasCompras.id_proveedor
  7. , TblProveedores.razonsocial
  8. , SUM(case when
  9. TblFacturasCompras.tipocomprobante IN ('A','B','NDA','NDB','C','NDC','X')
  10. then TblFacturasCompras.total
  11. else -TblFacturasCompras.total end) as Facturas
  12. from TblFacturasCompras
  13. left join TblProveedores on TblFacturasCompras.id_proveedor = TblProveedores.id
  14. group by TblProveedores.id
  15. ) A
  16. LEFT JOIN (
  17. select TblProveedores.id
  18. , TblProveedores.razonsocial
  19. , SUM(TblRecibosCompras.total) as Pay
  20. from TblProveedores
  21. left join TblRecibosCompras on TblRecibosCompras.id_proveedor = TblProveedores.id
  22. group by TblProveedores.id
  23. ) B ON A.id_proveedor = B.id and B.razonsocial <> ''
  24. order by B.razonsocial Asc
展开查看全部

相关问题