Raj,
The concept of a crosstab is that the columns *are* dynamic, ie one new column for every value of the table field chosen for the column heading. You can dynmaically change the *sql* for a crosstab to use different a different table field (or say, a different grouping on the column), and you can follow the pivot with an IN() clause to force certain columns, ie your data has only 10 months of data, but you want to show just an empty column for the missing 2 months.
I may have misunderstood your post, let me know if this is what you wanted to hear.
--Jim