我需要在结果上获取Get(Debe和Haber)列,我正在使用Union All,但我总是只获得这两列中的一列。
这是我的查询:
(SELECT tblfacturas.id AS ID,
tblclientes.razonsocial AS Cliente,
tblfacturas.fecha AS Fecha,
tblfacturas.tipocomprobante AS Tipo,
tblfacturas.nrofacturacompleto AS Numero,
tblfacturas.total AS Debe
FROM tblfacturas
left join tblclientes
ON tblclientes.id = tblfacturas.id_cliente
WHERE tblclientes.razonsocial = 'S.A.')
UNION ALL
(SELECT tblrecibos.id AS ID,
tblclientes.razonsocial AS Cliente,
tblrecibos.fecha AS Fecha,
'R' AS Tipo,
tblrecibos.nrorecibocompleto AS Numero,
tblrecibos.total AS Haber
FROM tblrecibos
left join tblclientes
ON tblclientes.id = tblrecibos.id_cliente
WHERE tblclientes.razonsocial = 'S.A.')
ORDER BY fecha
你需要null来添加一个Debe和Haber列不存在,否则你在同一列中获得两个结果(Debe)
SELECT TblFacturas.id as ID
, TblClientes.razonsocial as Cliente
,TblFacturas.fecha as Fecha
,TblFacturas.tipocomprobante as Tipo
,TblFacturas.nrofacturacompleto as Numero
, TblFacturas.total as Debe
, null as Haber
FROM TblFacturas
left join TblClientes on TblClientes.id = TblFacturas.id_cliente
where TblClientes.razonsocial = 'S.A.'
UNION ALL
SELECT TblRecibos.id
, TblClientes.razonsocial
,TblRecibos.fecha
, 'R'
,TblRecibos.nrorecibocompleto
, null
, TblRecibos.total
FROM TblRecibos
left join TblClientes on TblClientes.id = TblRecibos.id_cliente
where TblClientes.razonsocial = 'S.A.'
order by fecha
另一个建议..你有一个列参与左连接在where子句这个工作作为一个内部连接排除行如果左连接值不存在,你应该 或移动on子句中的where条件(如果还需要非macthing行)
SELECT TblRecibos.id
, TblClientes.razonsocial
,TblRecibos.fecha
, 'R'
,TblRecibos.nrorecibocompleto
, null
, TblRecibos.total
FROM TblRecibos
left join TblClientes on TblClientes.id = TblRecibos.id_cliente
AND TblClientes.razonsocial = 'S.A.'
或者如果只需要匹配行,则使用内连接
SELECT TblRecibos.id
, TblClientes.razonsocial
,TblRecibos.fecha
, 'R'
,TblRecibos.nrorecibocompleto
, null
, TblRecibos.total
FROM TblRecibos
INNER join TblClientes on TblClientes.id = TblRecibos.id_cliente
AND TblClientes.razonsocial = 'S.A.'