none
Como evitar os campos nulos no case? RRS feed

  • Pergunta

  • Aqui na empresa utilizamos um aplicativo de chamados para registrar atividades.
    existem uma tabela no banco de dados dessa aplicação que ficam armazenados informações adicionais do chamado.

    Exemplo: Nivel de atendimento, centro de custo, nome de empresa...
    cada pergunta do campo adicional tem um código e um tipo (texto, numero), ou seja quando é criada uma nova pergunta é gerado um código desta pergunta e eu também digo se é texto ou numero. 

    exemplo do select *

    ===============================

    select 
    cdchamado ,cdinformacaoadicional
    nminfadicional,  nminformacao
    
    cdachamado   código     nome da pergunta   resposta
    12345         108       Empresa             Plutão
    12345         109       CPF                000 000 000 00 000
    12345         110       CC                 111 111 111

    ===============================

    qual a necessidade?
    é fazer cada informação adicional ser um coluna e não vim na mesma linha.

    Cheguei a fazer assim :

    select cdchamado

    , case then cdinformacaoadicional = '108' then nminformacao end as Empresa

    , case then cdinformacaoadicional = '110' then nminformacao end as CentroCusto

    o resulta esta vindo assim>

    chamado   empresa     centrocusto
    12345     Plutão      null
    12345     NULL        111 111 11 222

    se não viesse  o null ficaria tudo numa linha só, que seria esse o objetivo.

    Obrigado pela Ajuda.


    Ednilton Santos


    • Editado Ednilton Santos quarta-feira, 18 de fevereiro de 2015 23:49 melhor formato
    quarta-feira, 18 de fevereiro de 2015 23:43

Respostas

Todas as Respostas

  • Boa noite,

    Experimente mais ou menos dessa forma:

    select
        cdchamado,
        max(case when cdinformacaoadicional = '108' then nminformacao end) as Empresa,
        max(case when cdinformacaoadicional = '110' then nminformacao end) as CentroCusto
    from Tabela
    group by
        cdchamado

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 19 de fevereiro de 2015 00:54
  • Ednilton,

    Tente o seguinte (estou admitindo que o nome da sua tabela é Atividade):

    SELECT E.chamado, E.nminformacao AS Empresa, C.nminformacao as CentroCusto
    FROM Atividades E
    INNER JOIN Atividades C ON C.cdchamado = E.cdchamado
    WHERE E.cdinformacaoadicional = '108' AND C.cdinformacaoadicional = '110'
    ORDER BY E.chamado

    quinta-feira, 19 de fevereiro de 2015 00:59
  • Deleted
    • Marcado como Resposta Ednilton Santos quinta-feira, 19 de fevereiro de 2015 22:33
    quinta-feira, 19 de fevereiro de 2015 09:48
  • Ola ,Gapimex.

    Apliquei os códigos que voce repassou e de fato somem os null, porem se tiver cinco registros do código 108 que eh a empresa, ele so mostra um registro ao invés do exibir cinco.


    Ednilton Santos

    quinta-feira, 19 de fevereiro de 2015 22:19
  • Ola Renato, 

    Fiz da forma que você mandou, mas se eu colocar o AND no where ele não trás nada, quando coloco o IN ai ele trás vários registros.

    Ednilton Santos

    quinta-feira, 19 de fevereiro de 2015 22:25
  • Olá Ednilton,

    Você pode postar uma amostra de dados com mais linhas e o respectivo resultado esperado?


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 19 de fevereiro de 2015 22:31
  • Pessoal muito obrigado.

    Jose, ajudou muito, o melhor foi aprender um comando novo, eu sou iniciante, meu aprendizado tem sido autodidata o que me faz deixar passar alguns códigos despercebidos. muito boa a funcionalidade do pivot.

    Mais uma vez obrigado a todos por reservarem um tempo para me ajudar.

    Obrigado.


    Ednilton Santos

    quinta-feira, 19 de fevereiro de 2015 22:45
  • posso sim.

    o resultado esperado:

    Ednilton Santos

    sexta-feira, 20 de fevereiro de 2015 00:12