我需要在Result上获取(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
答案 0 :(得分:0)
您需要在添加不存在的Debe和Haber列时使用null,否则将在同一列(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条件(如果您还需要not 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.'