-- ORACEL WITH T AS ( SELECT 'ID1' VAL FROM DUAL UNION ALL SELECT 'ID2' FROM DUAL UNION ALL SELECT 'ID3' FROM DUAL ) , T2 AS ( SELECT 'ID2,ID3,ID1' TXT FROM DUAL ) , ORDER_T AS ( SELECT LEVEL RN , REGEXP_SUBSTR(TXT ,'[^,]+' , 1 , LEVEL ) VAL FROM T2 CONNECT BY LEVEL <= (SELECT REGEXP_COUNT(TXT,',')+1 FROM T2 ) ) SELECT A.VAL FROM T A , ORDER_T B WHERE A.VAL IN ( 'ID2','ID3','ID1') AND A.VAL = B.VAL ORDER BY B.RN