Isso deve fazer o truque:
SELECT X,Y,Z,ROW_NUMBER() OVER (PARTITION BY X,Y,Z ORDER BY X,Y,Z)
FROM TABLE1
O ROW_NUMBER() marcará para cada valor no grupo X,Y,Z e será redefinido em um próximo grupo. A cláusula ORDER BY é usada para definir em que ordem deve ser assinalada, e pode ser alterada para o que você desejar. Essa é uma das funções analíticas que o Oracle fornece e pode ser muito útil.