› Fóruns › SQL e PL/SQL › Transformar linha em colunas
- Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 1 ano, 9 meses atrás por
Motta.
-
AutorPosts
-
17 de junho de 2024 às 5:15 pm #176408
ESSanches
ParticipanteBoa 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
21 de julho de 2024 às 11:50 am #176858Motta
ParticipanteJá deve ter caducado, mas fiz algo assim com CASE
__________________
SUM(CASE WHEN ANO_MES=ADD_MONTHS(PDATA,-11) THEN VALOR ELSE 0 END) M12,
SUM(CASE WHEN ANO_MES=ADD_MONTHS(PDATA,-10) THEN VALOR ELSE 0 END) M11,
…
SUM(CASE WHEN ANO_MES=ADD_MONTHS(PDATA,-1) THEN VALOR ELSE 0 END) M2,
SUM(CASE WHEN ANO_MES=PDATA THEN VALOR ELSE 0 END) M1,
___________
ONDE PDATA SERIA UM PARÂMETRO
-
AutorPosts
- Você deve fazer login para responder a este tópico.
› Fóruns › SQL e PL/SQL › Transformar linha em colunas