Grazie mille la tua query e' proprio quello che stavo cercando...

Un'altra domanda, sono riuscito ad adattare la mia query al problema usando il distinct:
codice:
select v1.customerid, v1.customername, count(distinct v1.productid)from
(select q.customerid, q.customername, d.productid 
from orderdetails d
inner join 
    (select o.orderid, c.customerid, c.customername
    from orders o 
    inner join customers c 
    on o.customerid = c.customerid) q
on d.orderid = q.orderid) as v1
group by v1.customerid, v1.customername

Ora questa funziona solo che non ho capito come mai nella tua query ci sono anche i codici dei clienti con zero items, mentre nella mia no...

Cmq grazie