Solo tienes que sacarlos por separado y luego utilizar un left join para obtener los ids no existentes en el primer conjunto.
 
No se cual es el campo que identifica cual es cargo y cual es abono asi que tome como cargo los menores a cero y abono los mayores a cero.  
Tomarlo de la descripcion haria el proceso muy lento. 
Aunque el query es al extenso, si la tabla tiene indice por ReservacionID no te pregara en el performance.  
Código:
 Select *
From  MiTabla M
Inner join
     (Select C.ReservacionID
      From (Select ReservacionID
            From   MiTabla
            Where  Cantidad < 0) C
      Left outer join
           (Select ReservacionID
            From   MiTabla
            Where  Cantidad > 0) D
      On    C.ReservacionID = D.ReservacionID
      Where D.ReservacionID is null) I
On M.ReservacionID = I.ReservacionID
  
Espero te sirva....  

 Saludos!