Oracle: como dividir os valores em colunas

Oracle: Dividir valores em Colunas

À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.
De esta maneira? Compartilhar em redes sociais:

LiveInternet