Fiquei com uma certa dúvida pois os dados da tabela não têm primary key. Coloquei um distinct pra chegar no resultado que você precisa, mas não sei se é bem isso... Distinct vai contra minha religião...
Selecionar tudo
SQL> create table t1 (cod, quant, marca) as
2 select 1, 10, 2 from dual union all
3 select 1, 10, 3 from dual union all
4 select 2, 10, 2 from dual union all
5 select 1, 20, 2 from dual;
Table created
SQL> SELECT DISTINCT *
2 FROM (SELECT cod,
3 marca,
4 SUM(quant) over(PARTITION BY cod) total,
5 SUM(quant) over(PARTITION BY cod, marca) total2,
6 ROUND(SUM(quant) over(PARTITION BY cod, marca) / SUM(quant) over(PARTITION BY cod) * 100, 2) tota2_total
7 FROM t1)
8 WHERE marca = 2;
COD MARCA TOTAL TOTAL2 TOTA2_TOTAL
---------- ---------- ---------- ---------- -----------
2 2 10 10 100
1 2 40 30 75
Talvez o mais correto fosse agregar em 2 níveis (cod e cod+marca) e depois agregar de novo em duas colunas... mas deixa ver se isso atende, senão volto pra prancheta.