Try something like:
select Code,sum([2012])+sum([2013])+sum([2014]) as 'No.days',sum([2012]),sum([2013]),sum([2014]) from(
select Code,
case when datepart(yy,fromdate)=datepart(yy,todate) and datepart(yy,fromdate)=2012 then datediff(dd,fromdate, todate)
when datepart(yy,fromdate)=2012 and datepart(yy,todate)>2012 then datediff(dd,fromdate,dateadd(yy,1,dateadd(dd,-datepart(dy,DATEADD(yy,1, fromdate)),fromdate)))
when datepart(yy,fromdate)<2012 and datepart(yy,todate)=2012 then DATEPART(dy,todate)
end as '2012',
case when datepart(yy,fromdate)=datepart(yy,todate) and datepart(yy,fromdate)=2013 then datediff(dd,fromdate, todate)
when datepart(yy,fromdate)=2013 and datepart(yy,todate)>2013 then datediff(dd,fromdate,dateadd(yy,1,dateadd(dd,-datepart(dy,DATEADD(yy,1, fromdate)),fromdate)))
when datepart(yy,fromdate)<2013 and datepart(yy,todate)=2013 then DATEPART(dy,todate)
end as '2013',
case when datepart(yy,fromdate)=datepart(yy,todate) and datepart(yy,fromdate)=2014 then datediff(dd,fromdate, todate)
when datepart(yy,fromdate)=2014 and datepart(yy,todate)>2014 then datediff(dd,fromdate,dateadd(yy,1,dateadd(dd,-datepart(dy,DATEADD(yy,1, fromdate)),fromdate)))
when datepart(yy,fromdate)<2014 and datepart(yy,todate)=2014 then DATEPART(dy,todate)
end as '2014'
from myTable
) as daystable
group by Code
If you need more years you will need to add some more fields in the subquery.