Uma função muito útil no PL / SQL para inverter valores de colunas para linha é o CASE.
Por exemplo, quando você quer simplificar a visualização de uma query de vendas por mês, ao invés de apresentar a data junto ao valor das vendas (na mesma linha), você pode colocar a data como coluna.
Então no lugar de ter: SELECT cidade, dt_venda, valor FROM venda
Que geraria uma lista muito grande e difícil de entender.
Você poderia melhorara usando a função case e sum, assim:
SELECT cidade
, Sum (CASE WHEN dt_venda BETWEEN '01/01/2008' AND '31/01/2008' THEN valor END) AS JANEIRO_2008
, Sum (CASE WHEN dt_venda BETWEEN '01/02/2008' AND '28/02/2008' THEN valor END) AS FEVEREIRO_2008
, Sum (CASE WHEN dt_venda BETWEEN '01/03/2008' AND '31/03/2008' THEN valor END) AS MARCO_2008
-- e assim por diante nos outros meses.
FROM venda
GROUP BY cidade
Onde os messes apareceriam como coluna e a soma como linha, assim:
CIDADE | JANEIRO_2008 | FEVEREIRO_2008 | MARCO_2008 |
CAPÃO DA CAMPA | 100 | 200 | 150 |
PORTO ALEGRE | 150 | 100 | 125 |
SÃO PAULO | 300 | 250 | 310 |
Ok?
Um comentário:
Ótima dica, estava a uma semana tentando criar um relatório parecido com este e não estava conseguindo. Tentava com sub-select mas não tinha sucesso.
Obrigado
Abraços
Postar um comentário