Inquiridor
Retorno de colunas com usando PIVOT

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 DBTEMPCREATE 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 NULLPreciso 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
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- Sugerido como Resposta Junior Galvão - MVPMVP domingo, 21 de novembro de 2010 00:51
-
-