none
Retorno de colunas com usando PIVOT RRS feed

  • Pergunta

  • Boa tarde! Pessoal, estou tentanto trazer um conjunto de valores em colunas agrupando conforma a ordem abaixo. Montei toda a estrutura de forma simplificada para facilitar o suporte, preciso que o retorno seja conforme o último parágrafo.


    USE DBTEMP

    CREATE TABLE #EXEMPLOPIVOT (CODIGO INT, NOME VARCHAR(10),GRUPO VARCHAR(10),MEDIDA_PADRAO numeric(18,8));

    INSERT INTO #EXEMPLOPIVOT (CODIGO, NOME,GRUPO,MEDIDA_PADRAO) VALUES (1,'TABELA1','PI',    120)
    INSERT INTO #EXEMPLOPIVOT (CODIGO, NOME,GRUPO,MEDIDA_PADRAO) VALUES (2,'TABELA2','CANAL1',200)
    INSERT INTO #EXEMPLOPIVOT (CODIGO, NOME,GRUPO,MEDIDA_PADRAO) VALUES (3,'TABELA3','PI',     80)
    INSERT INTO #EXEMPLOPIVOT (CODIGO, NOME,GRUPO,MEDIDA_PADRAO) VALUES (4,'TABELA4','CANAL1',400)
    INSERT INTO #EXEMPLOPIVOT (CODIGO, NOME,GRUPO,MEDIDA_PADRAO) VALUES (5,'TABELA5','CANAL2',500)
    INSERT INTO #EXEMPLOPIVOT (CODIGO, NOME,GRUPO,MEDIDA_PADRAO) VALUES (6,'TABELA6','CANAL2',600)

    SELECT * FROM #EXEMPLOPIVOT ORDER BY GRUPO, CODIGO 

    CODIGO      NOME       GRUPO      MEDIDA_PADRAO
    ----------- ---------- ---------- --------------
    2           TABELA2    CANAL1     200.00000000
    4           TABELA4    CANAL1     400.00000000
    5           TABELA5    CANAL2     500.00000000
    6           TABELA6    CANAL2     600.00000000
    1           TABELA1    PI             120.00000000
    3           TABELA3    PI              80.00000000


    SELECT
      [TABELA1],[TABELA3],[TABELA2],[TABELA4],[TABELA5],[TABELA6] FROM #EXEMPLOPIVOT
    PIVOT
     (MAX(MEDIDA_PADRAO) FOR NOME IN ([TABELA1],[TABELA3],[TABELA2],[TABELA4],[TABELA5],[TABELA6])) P;


    TABELA1         TABELA3       TABELA2         TABELA4       TABELA5         TABELA6
    --------------     -----------     ------------       -------------    ------------      ------------
    NULL                NULL            200.00000000 NULL              NULL              NULL
    NULL                NULL            NULL              400.00000000 NULL              NULL
    NULL                NULL            NULL              NULL              500.00000000 NULL
    NULL                NULL            NULL              NULL              NULL              600.00000000
    120.00000000   NULL            NULL              NULL              NULL              NULL
    NULL                80.00000000 NULL              NULL              NULL              NULL

    Preciso que o retorno seja conforme a linha abaixo, isto é sem os valores nulos

    TABELA1           TABELA3       TABELA2        TABELA4         TABELA5        TABELA6
    --------------      -----------      ------------      -------------      ------------      ------------
    120.00000000   80.00000000 200.00000000 400.00000000  500.00000000 600.00000000

    quarta-feira, 17 de novembro de 2010 18:30

Todas as Respostas

  • Sulimar....

    Caso o SUM não venha afetar os resultados posteriores, daría pra fazer assim:

     

    
    
    SELECT
    	SUM(ISNULL(X.TABELA1,0)),
    	SUM(ISNULL(X.TABELA3,0)),
    	SUM(ISNULL(X.TABELA2,0)),
    	SUM(ISNULL(X.TABELA4,0)),
    	SUM(ISNULL(X.TABELA5,0)),
    	SUM(ISNULL(X.TABELA6,0))
    FROM(
    	SELECT
    	 [TABELA1],[TABELA3],[TABELA2],[TABELA4],[TABELA5],[TABELA6] FROM #EXEMPLOPIVOT
    	PIVOT
    	 (MAX(MEDIDA_PADRAO) FOR NOME IN ([TABELA1],[TABELA3],[TABELA2],[TABELA4],[TABELA5],[TABELA6])) P
    	)X

     

    Caso contrário, podería equalizar utilizando o union (neste caso, 4 unions)..

    Espero ter ajudo.
    Rafael MElo

    quarta-feira, 17 de novembro de 2010 18:39
  • Obrigado Rafael, a principio era isso que eu precisava.

    Um abraço!
    Sulimar ____

    quarta-feira, 17 de novembro de 2010 19:02
  • Sulimar,

    Caso a resposta(s) acima tenha te ajudado, favor marque-a como resposta para que os demais se beneficiem.

    att.
    rafael

    quarta-feira, 17 de novembro de 2010 19:41