One more try with 10gR2

select to_number(column_value) HIREDATE, count(decode(to_number(extract(year from hiredate)), to_number(column_value), 1)) COUNT

from

emp,xmltable(‘for $i in 1980 to 1990 return $i’ )

group by to_number(column_value)

order by to_number(column_value)

/

1980 1

1981 10

1982 1

1983 0

1984 0

1985 0

1986 0

1987 2

1988 0

1989 0

1990 0

much more logic is :

select to_number(column_value), count(empno)

from emp right outer join

xmltable(‘for $i in 1980 to 1990 return $i’) on (extract(year from hiredate) = to_number(column_value))

group by to_number(column_value)

/