A more efficient way to write multiple CASE statements SELECT CASE WHEN ( Table.COLUMN1) IS NOT NULL THEN 1 ELSE 0 END,

  CASE WHEN ( CASE WHEN ( Table.COLUMN1) IS NOT NULL AND ( Table.COLUMN2) 
  IS NOT NULL THEN CASE WHEN ( Table.COLUMN1) - ( Table.COLUMN2) &gt;= 180 THEN 'Y' ELSE 'N' END ELSE 'N' END ) = 'Y' 
  THEN 1 ELSE 0 END,

  CASE WHEN ( CASE WHEN ( CASE WHEN ( Table.COLUMN1) IS NOT NULL AND ( Table.COLUMN2) 
  IS NOT NULL THEN CASE WHEN ( Table.COLUMN1) - ( Table.COLUMN2) &gt;= 180 THEN 'Y' ELSE 'N' END ELSE 'N' END ) = 'Y' 
  THEN ( Table 1.FULL) END ) IS NOT NULL THEN 1 ELSE 0 END,

  CASE WHEN ( CASE WHEN ( CASE WHEN ( Table.COLUMN1) IS NOT NULL AND ( Table.COLUMN2) 
  IS NOT NULL THEN CASE WHEN ( Table.COLUMN1) - ( Table.COLUMN2) &gt;= 180 THEN 'Y' ELSE 'N' END ELSE 'N' END ) = 'Y' 
  THEN ( CASE WHEN Table 3.DO = 'Z' THEN 'Y' END ) END ) IS NOT NULL THEN 1 ELSE 0 END,


  CASE WHEN ( CASE WHEN ( CASE WHEN ( Table.COLUMN1) IS NOT NULL AND ( Table.COLUMN2) 
  IS NOT NULL THEN CASE WHEN ( Table.COLUMN1) - ( Table.COLUMN2) &gt;= 180 THEN 'Y' ELSE 'N' END ELSE 'N' END ) = 'Y' 
  THEN ( NVL(( Table2.COLUMN3), ( Table2.COLUMN3 )) ) END ) IS NOT NULL THEN 1 ELSE 0 END,


  CASE WHEN ( CASE WHEN ( CASE WHEN ( Table 4. COLUMN1) IS NOT NULL AND ( Table.COLUMN2) 
  IS NOT NULL THEN CASE WHEN ( Table.COLUMN1) - ( Table.COLUMN2) &gt;= 180 THEN 'Y' ELSE 'N' END ELSE 'N' END ) = 'Y' 
  THEN ( NVL(( Table2.COLUMN3), ( Table2.COLUMN3)) ) END ) IS NOT NULL THEN 1 ELSE 0 END,


  CASE WHEN ( CASE WHEN ( CASE WHEN ( Table.COLUMN1) IS NOT NULL AND ( Table.COLUMN2) 
  IS NOT NULL THEN CASE WHEN ( Table.COLUMN1) - ( Table.COLUMN2) &gt;= 180 THEN 'Y' ELSE 'N' END ELSE 'N' END ) = 'Y' 
  THEN ( Table 3.FULL) END ) IS NOT NULL THEN 1 ELSE 0 END,


  CASE WHEN ( CASE WHEN ( CASE WHEN ( Table.COLUMN1) IS NOT NULL AND ( Table.COLUMN2) 
  IS NOT NULL THEN CASE WHEN ( Table.COLUMN1) - ( Table.COLUMN2) &gt;= 180 THEN 'Y' ELSE 'N' END ELSE 'N' END ) = 'Y' 
  THEN ( ( Table2.COLUMN3) ) END ) IS NOT NULL THEN 1 ELSE 0 END,


  CASE WHEN ( CASE WHEN ( CASE WHEN ( Table.COLUMN1) IS NOT NULL AND ( Table.COLUMN2) 
  IS NOT NULL THEN CASE WHEN ( Table.COLUMN1) - ( Table.COLUMN2) &gt;= 180 THEN 'Y' ELSE 'N' END ELSE 'N' END ) = 'Y' 
  then CASE WHEN ( CASE WHEN ( CASE WHEN ( Table.COLUMN1 ) IS NOT NULL AND ( Table.COLUMN2) 
  IS NOT NULL THEN CASE WHEN ( Table.COLUMN1) - ( Table.COLUMN2) &gt;= 180 THEN 'Y' ELSE 'N' END ELSE 'N' END ) = 'Y' 
  THEN ( ( Table2.COLUMN3) ) END ) IS NOT NULL AND ( Table.COLUMN1) - ( CASE WHEN ( CASE WHEN ( Table.COLUMN1) 
  IS NOT NULL AND ( Table.COLUMN2) IS NOT NULL 
  THEN CASE WHEN ( Table.COLUMN1) - ( Table.COLUMN2) &gt;= 180 THEN 'Y' ELSE 'N' END ELSE 'N' END ) = 'Y' 
  THEN ( ( Table2.COLUMN3) ) END ) &lt; 90 THEN 'Y' ELSE 'N' END END ) = 'Y' THEN 1 ELSE 0 END,


Is there a more efficient way to write this statement?
Here is one way to rewrite the query that should give the same results without nested CASE statements. I'm checking for NULLs first, to potentially short-circuit additional testing. I considered using a single WHEN, with an OR between each expression, but OR isn't deterministic so this may perform better. If those columns are mostly null (vs mostly filled), you could try rewriting it to test for IS NOT NULL instead of IS NULL, and see if there is a performance difference:

CASE 
    WHEN 
        Table.Column1 IS NULL
        OR Table.Column2 IS NULL
        OR Table1.Full IS NULL
    THEN 0
    WHEN
        Table.Column1 - Table.Column2 &gt;= 180
    THEN 1
    ELSE 0
END,
CASE 
    WHEN 
        Table.Column1 IS NULL
        OR Table.Column2 IS NULL
    THEN 0
    WHEN
        Table.Column1 - Table.Column2 &gt;= 180
        AND Table3.DO = 'Z'
    THEN 1
    ELSE 0
END,
CASE 
    WHEN 
        Table4.Column1 IS NULL
        OR Table.Column2 IS NULL
        OR Table2.COLUMN3 IS NULL
    THEN 0
    WHEN
        Table.Column1 - Table.Column2 &gt;= 180
    THEN 1
    ELSE 0
END,
CASE 
    WHEN 
        Table.Column1 IS NULL
        OR Table.Column2 IS NULL
        OR Table3.Full IS NULL
    THEN 0
    WHEN
        Table.Column1 - Table.Column2 &gt;= 180
    THEN 1
    ELSE 0
END,
...