Que motor de datos utilizas...??
Tengo entendido que en SQLServer hay una clausula Pivot que puede ayudarte a hacerlo. Al parecer firebird 1.5 tambien tendra algo que te ayude... pero no estoy seguro, pues no he migrado aun...
Si no, en interbase 6 o firebird 1.x la unica forma de hacerlo es con stored procedures, con lo que casi deja de ser dinamico.
Hasta luego.