Às vezes é vantajoso para criar colunas fora de um de vários valores em um campo de banco de dados Oracle. Vendo os valores dados como coluna, em oposição a linhas, permite diferentes manipulações de dados e apresentações. Um exemplo pode ser o de realizar uma operação matemática de uma lista de um campo, mas apresenta-se como um resultado sob um outro valor que representa uma categoria para que valor. Isto pode ser pensado como o equivalente de um gráfico de grade ou de tabulação cruzada.
Veja o que está disponível de dados por meio de uma consulta. Ex: SELECT * FROM TABLE
O resultado da consulta acima pode produzir os seguintes três colunas com valores mostrados.
CATEGORIA ITEM preço $
------ A ----------- 1 -------- 5
------ A ----------- 2 ------- 10
------ B ----------- 2 ------- 10
------ B ----------- 3 ------- 15
------ C ----------- 3 ------- 15
------ C ----------- 4 ------- 20
Reescrever a consulta para criar colunas para valores de categoria.
SELECIONAR
DECODE (categoria, `A`, ITEM, null) CATEGORYA,
DECODE (categoria, `B`, ITEM, null) CATEGORYB,
DECODE (categoria, `B`, ITEM, null) CATEGORYC
DE MESA
Nota: Esta consulta mostra como um valores de linha podem se tornar colunas
Resultado da consulta
CATEGORYA CATEGORYB CATEGORYC
------- 1
------- 2
----------------------------- 2
----------------------------- 3
---------------------------------------------------- 3
---------------------------------------------------- 4
Mesmo que categoria foi dividida em colunas exclusivas, as linhas de dados não entrar em colapso. Seis linhas de dados (ver o resultado Passo 1) ainda ocupam seis linhas de saída.
Reescrever a consulta para encontrar o preço máximo por colunas de categorias:
SELECIONAR
MAX (DECODE (categoria, `A`, $ PRICE, null)) CATEGORYA,
MAX (DECODE (categoria, `B`, $ PRICE, null)) CATEGORYB,
MAX (DECODE (categoria, `C`, $ PRICE, null)) CATEGORYC
DE MESA
Nota:
Esta consulta mostra agora uma linha resultante de dados (o preço máximo) por Categoria.
Isto pode ser verificado em relação aos dados de exemplo no Passo 1.
para CategoryA, 10 é o máximo de valores de 5 e 10.
para CategoryB, 15 é o máximo de valores de 10 e 15.
- para CategoryC, 20 é o máximo de valores de 15 e 20.
Resultado da consulta:
CATEGORYA CATEGORYB CATEGORYC
---------10 ----------------- 15 --------------- 20
dicas & avisos
- MAX é uma função de agregação Oracle que localiza o valor máximo de uma lista de valores, seja alfanumérico, numérico ou de dados.
- DECODE é uma função Oracle que converte valores de campo como uma coluna recém-nomeado.