none
Como aplicar um "or" em uma consulta corretamente? RRS feed

  • Pergunta

  • Prezados,

    Preciso colocar um "or" nesta consulta, mas não está funcionando, o que está errado?

    SELECT 
    SUM(CASE WHEN HC.CODSERIEHIST = 1 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) OR SUM(CASE WHEN HCC.CODSERIEHIST = 1 THEN CAST(HCC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL1,
    SUM(CASE WHEN HC.CODSERIEHIST = 2 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL2,
    SUM(CASE WHEN HC.CODSERIEHIST = 3 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL3,
    SUM(CASE WHEN HC.CODSERIEHIST = 4 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL4,
    SUM(CASE WHEN HC.CODSERIEHIST = 5 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL5,
    SUM(CASE WHEN HC.CODSERIEHIST = 6 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL6,
    SUM(CASE WHEN HC.CODSERIEHIST = 7 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL7,
    SUM(CASE WHEN HC.CODSERIEHIST = 8 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL8
    FROM SHISTDISCCOL HC, SHITALUNOCOL HCC (NOLOCK)
    WHERE HC.CODCOLIGADA = :CODCOLIGADA
    AND HC.CODCURSOHIST = 10
    AND HC.RA = :RA

    Obrigado.

    sexta-feira, 26 de outubro de 2012 16:07

Respostas

  • Chédison, esta sintaxe que esta usando não vai funcionar, quando se usa case o certo é sempre dizer ao sql, caso situação = 'A' faça isto, caso = 'B' outro senao alguma outra coisa.

    Ao inves de usar OR na sua condição esperimente colocar mais um WHEN como abaixo:

    SELECT 
    SUM(CASE WHEN HC.CODSERIEHIST = 1 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) when HCC.CODSERIEHIST = 1 THEN CAST(HCC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL1,
    SUM(CASE WHEN HC.CODSERIEHIST = 2 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL2,
    SUM(CASE WHEN HC.CODSERIEHIST = 3 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL3,
    SUM(CASE WHEN HC.CODSERIEHIST = 4 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL4,
    SUM(CASE WHEN HC.CODSERIEHIST = 5 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL5,
    SUM(CASE WHEN HC.CODSERIEHIST = 6 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL6,
    SUM(CASE WHEN HC.CODSERIEHIST = 7 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL7,
    SUM(CASE WHEN HC.CODSERIEHIST = 8 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL8
    FROM SHISTDISCCOL HC, SHITALUNOCOL HCC (NOLOCK)
    WHERE HC.CODCOLIGADA = :CODCOLIGADA
    AND HC.CODCURSOHIST = 10
    AND HC.RA = :RA


    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.

    sexta-feira, 26 de outubro de 2012 16:28

Todas as Respostas

  • Chédison, esta sintaxe que esta usando não vai funcionar, quando se usa case o certo é sempre dizer ao sql, caso situação = 'A' faça isto, caso = 'B' outro senao alguma outra coisa.

    Ao inves de usar OR na sua condição esperimente colocar mais um WHEN como abaixo:

    SELECT 
    SUM(CASE WHEN HC.CODSERIEHIST = 1 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) when HCC.CODSERIEHIST = 1 THEN CAST(HCC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL1,
    SUM(CASE WHEN HC.CODSERIEHIST = 2 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL2,
    SUM(CASE WHEN HC.CODSERIEHIST = 3 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL3,
    SUM(CASE WHEN HC.CODSERIEHIST = 4 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL4,
    SUM(CASE WHEN HC.CODSERIEHIST = 5 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL5,
    SUM(CASE WHEN HC.CODSERIEHIST = 6 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL6,
    SUM(CASE WHEN HC.CODSERIEHIST = 7 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL7,
    SUM(CASE WHEN HC.CODSERIEHIST = 8 THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) ELSE 0 END) AS CHTOTAL8
    FROM SHISTDISCCOL HC, SHITALUNOCOL HCC (NOLOCK)
    WHERE HC.CODCOLIGADA = :CODCOLIGADA
    AND HC.CODCURSOHIST = 10
    AND HC.RA = :RA


    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.

    sexta-feira, 26 de outubro de 2012 16:28
  • Boa tarde,

    Experimente desta forma:

    SUM(CASE WHEN HC.CODSERIEHIST = 1 
            THEN CAST(HC.CARGAHORARIA AS DECIMAL(15,0)) 
            ELSE CASE WHEN HCC.CODSERIEHIST = 1 
                     THEN CAST(HCC.CARGAHORARIA AS DECIMAL(15,0)) 
                     ELSE 0 
                 END
        END) AS CHTOTAL1,

    Espero que ajude.


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

    sexta-feira, 26 de outubro de 2012 16:30
  • Desculpe Alexandre, você ainda não havia postado quando comecei a redigir a minha resposta...

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

    sexta-feira, 26 de outubro de 2012 16:34
  • Que isso, não tem problema não, quanto mais informações e pessoas participando melhor será o nivel do forum :)

    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.

    sexta-feira, 26 de outubro de 2012 16:35
  • Muito obrigado pela força Alexandre
    sexta-feira, 26 de outubro de 2012 17:47