Firebird, no soporta lo que te ha sugerido Bagy, que en la jerga de Oracle se llaman Inline Views.
Lo que no me queda claro, es que al plantear la unión de los dos queryes presentados, inevitablemente habrán datos repetidos, y no especificas como queres agruparlos (sumandolos, restandolos, sacando promedio, etc).
Me llama la atención el hecho de que la segunda consulta es un subconjunto de la primera. Es decir, todo lo que arroje la segunda consulta ya estará dado en la primera (tomando en cuenta solamente los campos de agrupación expuestos, claro).
Si esto no es lo que buscas, como supongo, lo que te hace falta es excluir de la primera consulta los que devolverá la segunda.
algo como:
Código SQL
[-]
Select fechaventa, bla, bla, bla
from DetalleEncabezado
where fechaventa > '07/01/04'
and not((descuento > 0) or (descuentoencabezado > 0))
union
Select fechaventa, bla, bla, bla
from DetalleEncabezado
where fechaventa > '07/01/04'
and ((descuento > 0) or (descuentoencabezado > 0))
He preferido usar el operador not, y no poner directamente la negación de la condición, que involucraría, además de comparar <= 0, que incluya los nulos (si tus campos lo permiten).
Por último, la etiqueta correcta para publicar sentencias sql es [ sql ], y no existe la etiqueta [ indent ] que has usado en tu post anterior, que lo he editado para que tenga la presentación que (supongo) esperabas porque, probablemente al cortar y pegar, has movido de lugar otras etiquetas.
hasta luego.