none
Consulta SQL entre 3 colunas da mesma tabela RRS feed

  • Pergunta

  • Pessoal,

    eu tenho uma tabela e nela possui 3 colunas como: Data_Processamento | INF1 | INF 2

    através de uma instrução SQL, como posso fazer para que seja mostrado as quantidades de INF1 e INF2 que consta em cada DATA_PROCESSAMENTO?

    Exemplo:

    DATA_PROCESSAMENTO      INF1       INF2

            010112                            6             8

            020112                            8             12

    E precisaria também que fosse mostrado as quantidades de INF1 apenas de uma informação específica, Exemplo:

    No INF1 eu teria: AA BB CC AA então gostaria que ele contasse apenas os AA

    Espero ter me explicado bem..

    Obrigado

    quarta-feira, 6 de fevereiro de 2013 20:51

Respostas

  • Não conheço o Access. No SQL Server sei que funcionaria da forma que sugeri.

    Experimente alterar aquela linha para ver se funciona desta forma:

    SUM(IIF(Msg_erro LIKE 'A*', 1, 0)) AS Abends_Gerenciados,

    Espero que ajude.


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

    • Marcado como Resposta Bcosta10 sexta-feira, 8 de fevereiro de 2013 18:47
    quinta-feira, 7 de fevereiro de 2013 22:45

Todas as Respostas

  • boa noite, acho que sua primeira questão seria mais ou menos assim:

    select
    Data_Processamento,
    count(Inf1) as Inf1,
    count(Inf2) as Inf2
    from tabela
    group by Data_Processamento
    order by 1

    Na sua segunda questão fiquei um pouco confuso, pode detalhar um pouco mais ?

    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 6 de fevereiro de 2013 21:11
  • Ola Alexandre,

    Obrigado pelo Help,

    Na segunda questão é assim:

    Quando eu fizer aquele primeiro processo que você me ensinou o que acontece, dos dados do INF1 eu preciso contar apenas uma informacao especifica dele:

    Tipo assim: eu quero contar de INF1 nas datas de processamento apenas o nome PEDRO e de INF2 eu vou contar tudo.

    DT_Processamento  INF1        INF2

    010112                  Joao        Joao

    020112                  Pedro      Pedro

    030112                  Ricardo   Ricardo

    040112                  Pedro     Pedro

    Então quando fizer o select, preciso que na visualização dele apareca a contagem de INF1 apenas para PEDRO e INF2 vai contar tudo

    Entao ficaria assim:

    DT_Processamento  INF1       INF2

    01012                      0             1

    020112                    1             1

    030112                    0             1

    040112                    1             1

    Sera que consegui explicar melhor? espero que sim...

    Muito Obrigado Alexandre

    quarta-feira, 6 de fevereiro de 2013 21:40
  • Ok, entendi, não vou ter tempo para testar hoje, mas veja se o codigo abaixo funciona:

    select
    Data_Processamento,
    inf1 =  case when Inf1 = 'Pedro' then COUNT(*) else 0 end,
    count(Inf2) as Inf2
    from tabela
    group by Data_Processamento
    order by 1
    


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Bcosta10 quarta-feira, 6 de fevereiro de 2013 21:51
    • Não Marcado como Resposta Bcosta10 quarta-feira, 6 de fevereiro de 2013 23:13
    quarta-feira, 6 de fevereiro de 2013 21:44
  • Vou testar assim Alexandre,

    Caso de algum erro, vou aqui e posto novamente...

    MAs mesmo assim, muuuito obrigado pelo Help, me ajudou bastante mesmo..

    Abraços.

    quarta-feira, 6 de fevereiro de 2013 21:50
  • Pessoal

    Estou executando esta instrução:

    SELECT DT_Process AS Processamento,
    CASE WHEN Msg_erro LIKE 'A%' THEN COUNT(*) ELSE 0 END,
    COUNT(DT_Process) AS Jobs_Executados
    FROM TBL_AbendsHG_TXT
    GROUP BY DT_Process
    ORDER BY 1;

    Porém na linha 2 ele fala que a sintaxe esta errada, mas preciso que seja contado da coluna Msg_Erro apenas as informações que começem com A.

    Como posso fazer ?

    Obrigado.

    quarta-feira, 6 de fevereiro de 2013 22:59
  • Caso fique mais fácil, a mensagem que aparece para mim quando tento executar a consulta é:

    Erro de Sintaxe(Operador Faltando)na expressão de consulta'CASE WHEN Msg_Erro LIKE 'A%' THEN COUNT(*) ELSE 0 END,

    Obrigado.

    quarta-feira, 6 de fevereiro de 2013 23:03
  • Boa noite,

    Experimente desta forma:

    SUM(CASE WHEN Msg_erro LIKE 'A%' THEN 1 ELSE 0 END),

    Espero que ajude.


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

    quinta-feira, 7 de fevereiro de 2013 00:08
  • Gapimex,

    Obrigado pelo HELP mas não deu muito certo.

    Na realidade agora, só consegui fazer o que queria usando duas consultas separadas, por isso tive que cria-las desta forma:

    SELECT DT_Process AS Processamento, COUNT(Msg_Erro) AS Abends_Gerenciados
    FROM TBL_AbendsHG_TXT
    WHERE Msg_Erro LIKE  'A*'
    GROUP BY DT_Process
    ORDER BY 1;

    SELECT DT_Process AS Processamento, Count(DT_Process) AS Total_Abends
    FROM TBL_AbendsHG_TXT
    GROUP BY DT_Process
    ORDER BY 1;

    PRIMEIRA consulta me conta por dia as Msg_Erro que tenham A no inicio da informação e a SEGUNDA me conta o total de Msg_Erro por dia.

    Agora pergunto: Como posso fazer para que estas duas consultas fiquem juntas bastanto eu executar apenas uma consulta ao invés de duas ?

    Obrigado,

    quinta-feira, 7 de fevereiro de 2013 20:10
  • O que aconteceu exatamente? Foi exibida alguma mensagem de erro?

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

    quinta-feira, 7 de fevereiro de 2013 20:27
  • Elel fala a mesma coisa, ele diz que a sintaxe possui um erro...e mostra aquela linha do SUM que você havia me mostrado.

    Parece que ele não reconhece o comando.

    Não sei se tem alguma coisa a ver gapimex, mas estou executando esta instrução de SQL dentro do Access 2010. Eu acredito que SQL e SQL indiferente do programa não é ?

    Obrigado.

    quinta-feira, 7 de fevereiro de 2013 21:12
  • Não conheço o Access. No SQL Server sei que funcionaria da forma que sugeri.

    Experimente alterar aquela linha para ver se funciona desta forma:

    SUM(IIF(Msg_erro LIKE 'A*', 1, 0)) AS Abends_Gerenciados,

    Espero que ajude.


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

    • Marcado como Resposta Bcosta10 sexta-feira, 8 de fevereiro de 2013 18:47
    quinta-feira, 7 de fevereiro de 2013 22:45
  • Vou tentar novamente e depois volto para dar a resposta.

    Obrigado gapimex.

    quinta-feira, 7 de fevereiro de 2013 23:45
  • Gapimex,

    Mais uma vez muito obrigado.

    Agora sim, com este seu ultimo comando ocorreu tudo certo. Selecionou todos os dados que precisava em duas colunas.

    Abraços.

    sexta-feira, 8 de fevereiro de 2013 18:48