To powinno wystarczyć:
SELECT X,Y,Z,ROW_NUMBER() OVER (PARTITION BY X,Y,Z ORDER BY X,Y,Z)
FROM TABLE1
ROW_NUMBER() zaznaczy się dla każdej wartości w grupie X,Y,Z i zresetuje w następnej grupie. Klauzula ORDER BY służy do określenia, w jakiej kolejności ma się odliczać, i można ją zmienić na dowolną. Jest to jedna z funkcji analitycznych zapewnianych przez Oracle i może być bardzo przydatna.