Как получить результат двух столбцов с Союзом всех - PullRequest
0 голосов
/ 03 сентября 2018

Мне нужны столбцы Get (Debe and 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 

1 Ответ

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

вам нужен ноль для добавления столбца Дебе и Хабера, где его нет, в противном случае вы получите оба результата в одних и тех же столбцах (Дебе)

  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 (если вам нужны также строки без перехода)

  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.' 
...