WITH all_numbers AS ( SELECT LEVEL AS nmbrs FROM dual CONNECT BY LEVEL <=1000 ) SELECT a.nmbrs--, -- MIN(CASE WHEN ROUND(a.nmbrs/b.nmbrs)=(a.nmbrs/b.nmbrs) THEN 0 ELSE 1 END ) prime_flag FROM all_numbers a CROSS JOIN all_numbers b WHERE a.nmbrs<>b.nmbrs AND a.nmbrs<>1 AND b.nmbrs<>1 GROUP BY a.nmbrs HAVING MIN(CASE WHEN ROUND(a.nmbrs/b.nmbrs)=(a.nmbrs/b.nmbrs) THEN 0 ELSE 1 END ) = 1 ORDER BY 1