Dette burde gøre tricket:
SELECT X,Y,Z,ROW_NUMBER() OVER (PARTITION BY X,Y,Z ORDER BY X,Y,Z)
FROM TABLE1
ROW_NUMBER() vil krydse op for hver værdi i gruppen X,Y,Z og nulstilles ved en næste gruppe. ORDER BY-klausulen bruges til at definere, i hvilken rækkefølge den skal krydse, og kan ændres til, som du ønsker. Dette er en af de analytiske funktioner, som Oracle leverer, og den kan være meget nyttig.