terça-feira, 20 de janeiro de 2009

PL / SQL inverter linha / coluna

>

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:

Unknown disse...

Ó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