Если значения могут содержать NULL
значений, вам нужно будет использовать COALESCE
или NVL
:
SELECT DRIVERID
FROM BBI_BC.TRUCKS
WHERE COALESCE( JAN_2010_MILES, 0)
+ COALESCE( FEB_2010_MILES, 0)
+ .....
+ COALESCE( DEC_2012_MILES, 0) > 430000;
Если вы хотите автоматически сгенерировать запрос, то:
SELECT 'SELECT DRIVERID
FROM BBI_BC.TRUCKS
WHERE ' || LISTAGG( 'COALESCE( ' || TO_CHAR( ADD_MONTHS( DATE '2010-01-01', LEVEL - 1 ), 'MON_YYYY' ) || '_MILES, 0)', '
+ ' ) WITHIN GROUP ( ORDER BY LEVEL ) || ' > 430000;' AS sql
FROM DUAL
CONNECT BY ADD_MONTHS( DATE '2010-01-01', LEVEL - 1 ) <= DATE '2012-12-01';
Какие выходы:
SELECT DRIVERID
FROM BBI_BC.TRUCKS
WHERE COALESCE( JAN_2010_MILES, 0)
+ COALESCE( FEB_2010_MILES, 0)
+ COALESCE( MAR_2010_MILES, 0)
+ COALESCE( APR_2010_MILES, 0)
+ COALESCE( MAY_2010_MILES, 0)
+ COALESCE( JUN_2010_MILES, 0)
+ COALESCE( JUL_2010_MILES, 0)
+ COALESCE( AUG_2010_MILES, 0)
+ COALESCE( SEP_2010_MILES, 0)
+ COALESCE( OCT_2010_MILES, 0)
+ COALESCE( NOV_2010_MILES, 0)
+ COALESCE( DEC_2010_MILES, 0)
+ COALESCE( JAN_2011_MILES, 0)
+ COALESCE( FEB_2011_MILES, 0)
+ COALESCE( MAR_2011_MILES, 0)
+ COALESCE( APR_2011_MILES, 0)
+ COALESCE( MAY_2011_MILES, 0)
+ COALESCE( JUN_2011_MILES, 0)
+ COALESCE( JUL_2011_MILES, 0)
+ COALESCE( AUG_2011_MILES, 0)
+ COALESCE( SEP_2011_MILES, 0)
+ COALESCE( OCT_2011_MILES, 0)
+ COALESCE( NOV_2011_MILES, 0)
+ COALESCE( DEC_2011_MILES, 0)
+ COALESCE( JAN_2012_MILES, 0)
+ COALESCE( FEB_2012_MILES, 0)
+ COALESCE( MAR_2012_MILES, 0)
+ COALESCE( APR_2012_MILES, 0)
+ COALESCE( MAY_2012_MILES, 0)
+ COALESCE( JUN_2012_MILES, 0)
+ COALESCE( JUL_2012_MILES, 0)
+ COALESCE( AUG_2012_MILES, 0)
+ COALESCE( SEP_2012_MILES, 0)
+ COALESCE( OCT_2012_MILES, 0)
+ COALESCE( NOV_2012_MILES, 0)
+ COALESCE( DEC_2012_MILES, 0) > 430000;