Questo dovrebbe fare il trucco:
SELECT X,Y,Z,ROW_NUMBER() OVER (PARTITION BY X,Y,Z ORDER BY X,Y,Z)
FROM TABLE1
ROW_NUMBER() aumenterà per ogni valore nel gruppo X,Y,Z e si azzererà in un gruppo successivo. La clausola ORDER BY viene utilizzata per definire in quale ordine dovrebbe spuntare e può essere modificata a piacere. Questa è una delle funzioni analitiche fornite da Oracle e può essere molto utile.