Boa tarde pessoal.
Preciso fazer um relatório onde pegarei o faturamento de últimos 9 meses. Ate ai, tudo de boa. O problema é que sabemos que o SQL retorna isso em linhas, mas eu preciso mostrar isso em colunas.
Tentei usar a função PIVOT, mas não me atendeu. Preciso de um retorno com 10 colunas, onde a colunas serão:
1 – código da peça
2 – qtde faturada no mês corrente – 9 meses
3 – qtde faturada no mês corrente – 8 meses
4 – qtde faturada no mês corrente – 7 meses
…….
9 – qtde faturada no mês corrente
Hj, faço da seguinte maneira (por favor, não riam, mas foi o jeito que encontrei…rs)
SELECT PCA,
SUM(ANO_MES9) AS ANO_MES_09,
SUM(ANO_MES8) AS ANO_MES_08,
SUM(ANO_MES7 ) AS ANO_MES_07
FROM (SELECT PECA AS PCA,
ANO_MES AS ANO_MES9,
0 AS ANO_MES8,
0 AS ANO_MES7
FROM TAB_FATURAMENTO
UNION ALL
SELECT PECA AS PCA,
0 AS ANO_MES9,
ANO_MES AS ANO_MES8,
0 AS ANO_MES7
FROM TAB_FATURAMENTO
UNION ALL
SELECT PECA AS PCA,
0 AS ANO_MES9,
0 AS ANO_MES8,
ANO_MES AS ANO_MES7
FROM TAB_FATURAMENTO)
e assim segue para a qtde de meses que preciso retroagir. No caso de 9 meses, que é o que preciso, faço 9 “unions”.
Sei que é beeeeeeeeeeeeeeeem feio, mas foi a maneira que achei.
Como disse, tentei usar o PIVOT. Segue exemplo que peguei na net
SELECT ano, valor, categoria
FROM vendas
)
PIVOT (
SUM(valor)
FOR categoria 'Eletrônicos' AS eletronicos,
'Livros' AS livros,
'Roupas'ASroupas)
)
ORDER BY ano;
O problema é que na clausula IN do comando, preciso colocar comandos fixos, e não consegui fazer alguma coisa que fizesse essa clausula variar.
Espero que tenha conseguido me fazer entender.
Obrigado pela atenção.
Emerson