If I understand the question correctly you can for example use windowing aggregations, common table expression, and
LEAD
together to achieve the result.
For example the following query
select cod_orc,
quantidade,
preco_unit,
sum(Quantidade * Preco_unit * Iva /100 + (quantidade * preco_unit))
over (partition by cod_orc, quantidade, preco_unit order by cod_orc, quantidade, preco_unit) as TotalCIVA1
from Torcamento_aux, Torcamentos_new
where TOrcamento_aux.Cod_Orc=Torcamentos_new.cod_orcamento
would result to
cod_orc quantidade preco_unit TotalCIVA1
------- ---------- ---------- ----------
16 1 1 1,23
47 1 1 2,46
47 1 1 2,46
The result is quite close but if you want to show the total only on last row you can use LEAD to check if key columns differ on current and next row. For example
with initdata (cod_orc, quantidade, preco_unit, TotalCIVA1) as (
select cod_orc,
quantidade,
preco_unit,
sum(Quantidade * Preco_unit * Iva /100 + (quantidade * preco_unit))
over (partition by cod_orc, quantidade, preco_unit order by cod_orc, quantidade, preco_unit) as TotalCIVA1
from Torcamento_aux, Torcamentos_new
where TOrcamento_aux.Cod_Orc=Torcamentos_new.cod_orcamento
)
select cod_orc,
quantidade,
preco_unit,
case
when lead(cod_orc) over (order by cod_orc, quantidade, preco_unit) != cod_orc then TotalCIVA1
when lead(cod_orc) over (order by cod_orc, quantidade, preco_unit) is null then TotalCIVA1
else null
end as TotalCIVA1
from initdata
This would give
cod_orc quantidade preco_unit TotalCIVA1
------- ---------- ---------- ----------
16 1 1 1,23
47 1 1 NULL
47 1 1 2,46