Prezados, bom dia.
Tenho uma tabela com a seguinte estrutura:
"IDTabela, NRAno, QTProjetada"
Eu preciso trazer os valores da coluna NRAno como uma coluna, para tal utilizei PIVOT:
select
U.IDTabela,
U.[2013],
U.[2014]
from
TB_Tabela c
PIVOT (SUM(c.QTProjetada) FOR c.NRAno in ([2013], [2014])) as U
Ótimo! O problema é que desta forma, eu preciso informar quais os anos eu qro na consulta, e eu não tenho como fazer isto (os anos não são fixos).
Portanto, utilizei PIVOT Dinamico:
declare @values as nvarchar(max)
SELECT @values = STUFF(( SELECT DISTINCT
'],[' + CAST(NRAno AS VarChar(10))
FROM TB_Tabela
ORDER BY '],[' + CAST(NRAno AS VarChar(10))
FOR XML PATH('')
), 1, 2, '') + ']'
declare @query as nvarchar(max)
set @query = 'Select IDEmpreendimento, |@
from
(
Select IDTabela, NRAno, QTProjetada from TB_Tabela) PT
PIVOT
( SUM(QTProjetada) for NRAno in ( |@ )) pvt'
set @query = REPLACE(@query,'|@',@values)
exec(@query)
Isto retorna o que preciso, mas ao jogar no analysis services como Named Query, não funciona, pois ele tenta montar algo do tipo:
SELECT [TB_Tabela].*(
declare @values as nvarchar(max)
SELECT @values = STUFF(( SELECT DISTINCT
'],[' + CAST(NRAno AS VarChar(10))
FROM TB_ProjecaoProducaoAgua
ORDER BY '],[' + CAST(NRAno AS VarChar(10))
FOR XML PATH('')
), 1, 2, '') + ']'
declare @query as nvarchar(max)
set @query = 'Select IDEmpreendimento, |@
from
(
Select IDEmpreendimento, NRAno, QTProjetada from TB_ProjecaoProducaoAgua where IDEmpreendimento = 178029
) PT
PIVOT
( SUM(QTProjetada) for NRAno in ( |@ )) pvt'
set @query = REPLACE(@query,'|@',@values)
exec(@query)
) as [[TB_Tabela]]
Alguma sugestão?
Grato, Rafael