none
PIVOT - Analysis Services RRS feed

  • Pergunta

  • 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

    segunda-feira, 31 de março de 2014 12:21

Respostas

  • Ola, bom dia

    Atualmente a técnica de Pivoting é utilizada apenas para spreads estáticos, portanto qualquer outra forma é uma adaptação do T-SQL.

    Bem, eu pesquisei e vi algumas soluções pela internet, uma interessante que achei foi esta:

    http://stackoverflow.com/questions/21325394/dynamic-pivot-table-with-multiple-columns-in-sql-server

    Veja se te auxilia, 

    ;) até mais.


    Altieri Pereira http://altieripereira.blogspot.com/

    quinta-feira, 3 de abril de 2014 15:20