Query to return zero if nothing exist
If the list of payment types and currencies are known, you can do this with CTEs.

with paymenttypes as (
  select 0 as ptype,
  Union select 1 as ptype,
  Union select 2 as ptype ), 
currencies as 
( select 'Aaa' as currency
  union
  select 'Bbb' as currency ),
sourcedata as (
  select currency, ptype as paymenttype, 0 as amount
  from currencies, paymenttypes
  Union all
  select * 
  from data)
select currency, paymenttype, sum(amount)
from sourcedata
group by currency, paymenttype;


It basically creates a Cartesian product of all currency, paymenttype pairs with a 0 amount, then joins it with the source data.

If your lists of payment types and currencies are all in lookup tables, then substitute them in.

Also note there are other ways, using COALESCE etc.

SQL Fiddle link,