Depois de trabalhar com PIVOT, me deparei com outro problema: concatenar mais de um campo dentro do PIVOT.
No forum abaixo tem a pergunta e algumas soluções propostas:
http://stackoverflow.com/questions/27108762/pivot-sql-server-multiple-values-in-aggregate-function
Minha solução ficou da seguinte forma:
select * FROM
(select s.IdSKU, ca.Campo, [Valor] = Case when ca.Campo = 'cor' then REPLACE((Select distinct Valor AS [data()] from Colecao (NOLOCK) cl
INNER JOIN ColecaoParametro (NOLOCK)cp ON cp.IdColecao = cl.IdColecao
INNER JOIN ColecaoParametroProduto (NOLOCK) cpp ON cp.idcolecaoparametro = cpp.idcolecaoparametro
INNER JOIN produto (NOLOCK) p ON cpp.IdProduto = p.IdProduto
INNER JOIN categoria(NOLOCK) c ON c.idCategoria = p.idCategoria
INNER JOIN dbo.CategoriaFiltro (NOLOCK) cf0 ON cf0.IdCategoria=c.IdCategoria
INNER JOIN Sku (NOLOCK) s ON s.idProduto = p.idProduto
INNER JOIN SkuValorCampo (NOLOCK) svc ON svc.idSku = s.IdSKU
INNER JOIN ValorCampo (NOLOCK) vc ON vc.IdValorCampo = svc.idValorCampo
INNER JOIN Valor (NOLOCK) v ON v.IdValor = vc.IdValor
INNER JOIN Campo (NOLOCK) ca ON ca.IdCampo = vc.IdCampo
where s.IdSKU = 309613 and ca.Campo = 'cor' FOR xml path('')),' ',',') else v.Valor end
FROM Colecao (NOLOCK) cli
INNER JOIN ColecaoParametro (NOLOCK)cp ON cp.IdColecao = cli.IdColecao
INNER JOIN ColecaoParametroProduto (NOLOCK) cpp ON cp.idcolecaoparametro = cpp.idcolecaoparametro
INNER JOIN produto (NOLOCK) p ON cpp.IdProduto = p.IdProduto
INNER JOIN categoria(NOLOCK) c ON c.idCategoria = p.idCategoria
INNER JOIN dbo.CategoriaFiltro (NOLOCK) cf0 ON cf0.IdCategoria=c.IdCategoria
INNER JOIN Sku (NOLOCK) s ON s.idProduto = p.idProduto
INNER JOIN SkuValorCampo (NOLOCK) svc ON svc.idSku = s.IdSKU
INNER JOIN ValorCampo (NOLOCK) vc ON vc.IdValorCampo = svc.idValorCampo
INNER JOIN Valor (NOLOCK) v ON v.IdValor = vc.IdValor
INNER JOIN Campo (NOLOCK) ca ON ca.IdCampo = vc.IdCampo
where s.IdSKU = 309613
UNION
select s.IdSKU, ca.Campo, v.Valor
FROM Colecao (NOLOCK) cl
INNER JOIN ColecaoParametro (NOLOCK)cp ON cp.IdColecao = cl.IdColecao
INNER JOIN ColecaoParametroProduto (NOLOCK) cpp ON cp.idcolecaoparametro = cpp.idcolecaoparametro
INNER JOIN produto (NOLOCK) p ON cpp.IdProduto = p.IdProduto
INNER JOIN categoria(NOLOCK) c ON c.idCategoria = p.idCategoria
INNER JOIN dbo.CategoriaFiltro (NOLOCK) cf0 ON cf0.IdCategoria=c.IdCategoria
INNER JOIN Sku (NOLOCK) s ON s.idProduto = p.idProduto
INNER JOIN ProdutoValorCampo (NOLOCK) pvc ON pvc.idProduto = p.IdProduto
INNER JOIN ValorCampo (NOLOCK) vc ON vc.IdValorCampo = pvc.idValorCampo
INNER JOIN Valor (NOLOCK) v ON v.IdValor = vc.IdValor
INNER JOIN Campo (NOLOCK) ca ON ca.IdCampo = vc.IdCampo
where s.IdSKU = 309613) AS t
PIVOT
(MAX(Valor)
FOR Campo IN (Tamanho,Cor,Gênero)) tt
Muito Obrigado e até o próximo post!
Nenhum comentário:
Postar um comentário