Cross-tabs ou tabelas dinâmicas são a resposta. A partir daí você pode SELECT FROM ... INSERT INTO ... ou criar uma VIEW a partir de um único SELECT.
Algo como:
SELECT country,
MAX( IF( key='President', value, NULL ) ) AS President,
MAX( IF( key='Currency', value, NULL ) ) AS Currency,
...
FROM table
GROUP BY country;
Para mais informações:http://dev.mysql.com/tech -resources/articles/wizard/index.html