Проблема со стандартным заявлением PIVOT заключается в том, что вам нужно знать значения столбцов перед началом работы, чтобы вы могли определить их в «FOR xxx IN ('x', 'y', 'x' ...) заявление.
Чтобы обойти это, вам нужно будет сделать некоторый динамический SQL и создать строку, содержащую столбцы.
Интересная статья об этом здесь:
http://www.simple-talk.com/community/blogs/andras/archive/2007/09/14/37265.aspx
Я построил много запросов Pivot, используя эту технику, и, несмотря на то, что динамический SQL не может быть оптимизирована, а также хранимые процедуры, которые трудно они работают хорошо.
При необходимости я могу разместить код примера.