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!