In SQL Server, you can also do this with dynamic SQL. Something like:
declare @sql nvarchar(max);
select @sql = (select ', '+
(case when FieldName = 'Food' then 'Foods.DisplayName'
when FieldName = 'AnimalAge' then 'Animals.Age'
. . .
end)
from @fields
for xml path ('')
);
select @sql = 'select [Animals].[AnimalID] AS [AnimalID], [Animals].[name] AS [AnimalName]'+@sql+RESTOFQUERY;
exec(@sql);