none
Filtrar consulta sql RRS feed

  • Pergunta

  • Bom dia a todos,

    Sou iniciante em Sql Server e preciso filtrar o resultado de uma consulta, só que o filtro tem que ser sobre um SUM().

    Minha consulta mostra matricula, nome do funcionário e a outra (soma de uma coluna que contém minutos já convertido em horas). A soma esta correta mas queria filtrar resultados que mostrassem somente horas negativas(sinal - a frente) e retirasse as horas positivas e resultados como NULL. O código segue abaixo 

    Agradeço

    SELECT SUBSTRING(POCOFPTO.DFFUNCRACHA,8,15) AS MATRICULA, PFUNFPTO.DFFUNNOME AS NOME
     ,Cast( Floor(SUM(CASE WHEN DFMTVCODIGO = '062' OR DFMTVCODIGO = '063' OR DFMTVCODIGO = '101'
    THEN +DFOCOHORA WHEN  DFMTVCODIGO= '068' OR DFMTVCODIGO ='073' OR DFMTVCODIGO ='100' OR DFMTVCODIGO ='102' THEN
    -DFOCOHORA  END) / 60) as varchar) + ':' +  Right('00' + Cast( Floor(REPLACE(SUM(CASE WHEN DFMTVCODIGO = '062' OR 
    DFMTVCODIGO = '063' OR DFMTVCODIGO = '101' THEN +DFOCOHORA WHEN  DFMTVCODIGO= '068' OR DFMTVCODIGO ='073' OR DFMTVCODIGO ='100' 
    OR DFMTVCODIGO ='102' THEN -DFOCOHORA END),'-','0') % 60) as varchar), 2)  AS SALDO_NEGATIVO
    FROM POCOFPTO INNER JOIN PFUNFPTO ON POCOFPTO.DFFUNCRACHA = PFUNFPTO.DFFUNCRACHA 
    WHERE  FORPONTO.PFUNFPTO.DFFUNCLASSE = 'N' AND PFUNFPTO.DFFUNDATADEMISSAO = '1899-30-12 00:00:00.000' AND DFOCODATA <=
    '2018-31-03 00:00:00.000' GROUP BY POCOFPTO.DFFUNCRACHA,FORPONTO.PFUNFPTO.DFFUNNOME 

    terça-feira, 17 de abril de 2018 19:05

Respostas

Todas as Respostas

  • Boa tarde,

    Nesse caso experimente adicionar a clausula Having no final conforme exemplo abaixo:

    HAVING SUM(ColunaExemplo) < 0

    Espero que ajude


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

    terça-feira, 17 de abril de 2018 19:12
  • Muito obrigado deu certo...

    Estou só com outro problema agora!!!!

    Eu adicionei o Having e filtrou perfeito, esta saindo apenas os resultados ou horas negativas, mas não consigo limitar as datas usando BETWEEN. Acredito que

    preciso usar uma subquery mas não sei como!

    Poderiam me ajudar?

    O código atualizado segue abaixo:

    SELECT SUBSTRING(POCOFPTO.DFFUNCRACHA,8,15) AS MATRICULA, PFUNFPTO.DFFUNNOME AS NOME
     ,Cast( Floor(SUM(CASE WHEN DFMTVCODIGO = '062' OR DFMTVCODIGO = '063' OR DFMTVCODIGO = '101'
    THEN +DFOCOHORA WHEN  DFMTVCODIGO= '068' OR DFMTVCODIGO ='073' OR DFMTVCODIGO ='100' OR DFMTVCODIGO ='102' THEN
    -DFOCOHORA  END) / 60) as varchar) + ':' +  Right('00' + Cast( Floor(REPLACE(SUM(CASE WHEN DFMTVCODIGO = '062' OR 
    DFMTVCODIGO = '063' OR DFMTVCODIGO = '101' THEN +DFOCOHORA WHEN  DFMTVCODIGO= '068' OR DFMTVCODIGO ='073' OR DFMTVCODIGO ='100' 
    OR DFMTVCODIGO ='102' THEN -DFOCOHORA END),'-','0') % 60) as varchar), 2)  AS SALDO_NEGATIVO
    FROM POCOFPTO INNER JOIN PFUNFPTO ON POCOFPTO.DFFUNCRACHA = PFUNFPTO.DFFUNCRACHA 
    WHERE POCOFPTO.DFOCODATA BETWEEN '2017-01-10 00:00:00.000' AND '2018-31-03 00:00:00.000'  AND PFUNFPTO.DFFUNCLASSE =
     'N' AND PFUNFPTO.DFFUNDATADEMISSAO = '1899-30-12 00:00:00.000'    GROUP BY POCOFPTO.DFFUNCRACHA, PFUNFPTO.DFFUNNOME 
    HAVING SUM(CASE WHEN DFMTVCODIGO = '062' OR DFMTVCODIGO = '063' OR DFMTVCODIGO = '101'
    THEN +DFOCOHORA WHEN  DFMTVCODIGO= '068' OR DFMTVCODIGO ='073' OR DFMTVCODIGO ='100' OR DFMTVCODIGO ='102' THEN
    -DFOCOHORA END) LIKE '-%'


    terça-feira, 17 de abril de 2018 21:58
  • Tiago,

    As datas estão armazenadas no formato que você esta passando na sua query?

    Existem realmente valores de data armazenados com os possíveis valores informados?

    Tente executar seu código por partes, ou seja, declare algumas condições e vá executando, depois outros condições e assim por diante para justamente tentar identificar qual condição esta impactando o resultado.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 18 de abril de 2018 12:12