Dê uma olhada nesta função. Eu fiz truques semelhantes para dividir e transpor dados no Oracle. Faça um loop sobre os dados inserindo os valores decodificados em uma tabela temporária. O convento é que o MS permite que você faça isso rapidamente, enquanto o Oracle exige uma tabela temporária explícita.
Função de divisão do MS SQL
Melhor função de divisão
Editar por autor: Isso funcionou muito bem. O código final ficou assim (depois de criar a função split):
select pv.productid, colortable.items as color
from product p
cross apply split(p.color, ',') as colortable