Das sollte funktionieren:
SELECT X,Y,Z,ROW_NUMBER() OVER (PARTITION BY X,Y,Z ORDER BY X,Y,Z)
FROM TABLE1
Die ROW_NUMBER() wird für jeden Wert in der Gruppe X, Y, Z ankreuzen und bei einer nächsten Gruppe zurückgesetzt. Die ORDER BY-Klausel wird verwendet, um zu definieren, in welcher Reihenfolge sie ticken soll, und kann beliebig geändert werden. Dies ist eine der analytischen Funktionen, die Oracle bereitstellt, und kann sehr nützlich sein.