Я не думаю, что решение PIVOT - это то, что вам действительно нужно. Вместо этого вы можете сделать следующее
WITH TestData AS
(
SELECT 1 Col1, 1 Col2, 5 Cnt, 'green' color
UNION SELECT 1 , 2 , 0 Cnt, 'blue'
UNION SELECT 1 , 3 , 7 Cnt, 'red'
UNION SELECT 2 , 1 , 0 Cnt, 'gray'
UNION SELECT 2 , 2 , 10 Cnt, 'yellow'
UNION SELECT 2 , 3 , 8 Cnt, 'orange'
)
SELECT
t1.col1 c11 ,
t1.col2 d11 ,
t1.cnt e11,
t1.color color11,
t2.col1 c12 ,
t2.col2 d12 ,
t2.cnt e12,
t2.color color12 ,
t3.col1 c13 ,
t3.col2 d13 ,
t3.cnt e13,
t3.color color13
FROM
TestData t1
inner join TestData t2
ON t1.Col1 = t2.Col1
inner join TestData t3
ON t1.Col1 = t3.Col1
where t1.Col2 = 1
and t2.Col2 = 2
and t3.Col2 = 3
Что выводит это
c11 d11 e11 color11 c12 d12 e12 color12 c13 d13 e13 color13
--- --- --- ------- --- --- --- ------- --- --- --- -------
1 1 5 green 1 2 0 blue 1 3 7 red
2 1 0 gray 2 2 10 yellow 2 3 8 orange
(2 row(s) affected)
Полагаю, вам, вероятно, потребуется динамически генерировать этот sql в своем решении, а не статическое решение, которое у меня есть.