none
Case com 2 condições < e > RRS feed

  • Pergunta

  • Boa Tarde

    É possível fazer um CASE com duas condições?

    Exemplo:

    Tenho as variáveis.

    SET
    @EndDate = '2017-12-31'

    SET
    @AsOfDate= '2017-04-18'

    SET
    @StartDate = '2016-11-02' 

    O meu cálculo hoje abaixo, se a data de expiração é 18/04, ele trará valores das datas para frente

    SUM(CASE WHEN Expiration < @AsOfDate THEN 0 ELSE COALESCE(OriginalAmount,0) + COALESCE(Transactions,0) END)

    Mas eu quero já deixar automatico em um certo período e ele atualiza conforme o dia for passando.

    Então se caso a data de expiração passar, isto é for menor que hoje(getdate) E @AsOfDate(ex 30/06) então 0 caso contrario ele soma o valor original e as transações.

    É possivel?

    Por que desta forma, cada novo dia que for passando, ele mesmo vai atualizando para 0. 

    Eu não sei o que usa para duas condições, não tenho certeza do AND

    SUM(CASE WHEN Expiration < Getdate() AND > @AsOfDate THEN 0 ELSE COALESCE(OriginalAmount,0) + COALESCE(Transactions,0) END)

    Obrigada



    terça-feira, 18 de abril de 2017 19:37

Respostas

  • Neste caso seria o inverso:

    Expiration > Getdate() AND Expiration  < @AsOfDate

    Deste modo, resumindo visualmente  GetDate() < Expiration < @AsOfDate.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    terça-feira, 18 de abril de 2017 23:22
  • Neste caso seria o inverso:

    Expiration > Getdate() AND Expiration  < @AsOfDate

    Deste modo, resumindo visualmente  GetDate() < Expiration < @AsOfDate.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    Eu também pensei em trocar os sinais hoje pela manhã no caminho.

    Está executando. E já finalizo como resposta. Obrigada 

    • Marcado como Resposta Thaís Sakamoto quarta-feira, 19 de abril de 2017 12:56
    quarta-feira, 19 de abril de 2017 12:16
  • Obrigada Juliano pela ajuda

    Fiz desta forma:

    SUM(CASE WHEN Expiration > Getdate() AND Expiration  < @AsOfDate THEN COALESCE(OriginalAmount,0) + COALESCE(Transactions,0) ELSE 0 END)

    Colocando o else 0 no final, se não obedecer entre as condições do meu case será 0

    Obrigada

    • Marcado como Resposta Thaís Sakamoto quarta-feira, 19 de abril de 2017 12:56
    quarta-feira, 19 de abril de 2017 12:56

Todas as Respostas

  • Thaís, 

    Você pode ter mais de uma condição, mas precisa repetir o item a ser comparado:

    SUM(CASE WHEN Expiration < Getdate() AND Expiration  > @AsOfDate THEN 0 ELSE COALESCE(OriginalAmount,0) + COALESCE(Transactions,0) END)


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    terça-feira, 18 de abril de 2017 19:45
  • Thaís, 

    Você pode ter mais de uma condição, mas precisa repetir o item a ser comparado:

    SUM(CASE WHEN Expiration < Getdate() AND Expiration  > @AsOfDate THEN 0 ELSE COALESCE(OriginalAmount,0) + COALESCE(Transactions,0) END)


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    Eu sei que é pergunta de iniciante.

    Se eu uso desta forma, ele obedece ao > @AsOfDate tras valores anteriores da data hoje, eu quero entre a data de hoje até a data que estipular na variavel

    Expiration < Getdate() AND Expiration > @AsOfDate

    • Marcado como Resposta Thaís Sakamoto quarta-feira, 19 de abril de 2017 12:56
    • Não Marcado como Resposta Thaís Sakamoto quarta-feira, 19 de abril de 2017 12:56
    terça-feira, 18 de abril de 2017 20:01
  • Neste caso seria o inverso:

    Expiration > Getdate() AND Expiration  < @AsOfDate

    Deste modo, resumindo visualmente  GetDate() < Expiration < @AsOfDate.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    terça-feira, 18 de abril de 2017 23:22
  • Neste caso seria o inverso:

    Expiration > Getdate() AND Expiration  < @AsOfDate

    Deste modo, resumindo visualmente  GetDate() < Expiration < @AsOfDate.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    Eu também pensei em trocar os sinais hoje pela manhã no caminho.

    Está executando. E já finalizo como resposta. Obrigada 

    • Marcado como Resposta Thaís Sakamoto quarta-feira, 19 de abril de 2017 12:56
    quarta-feira, 19 de abril de 2017 12:16
  • Obrigada Juliano pela ajuda

    Fiz desta forma:

    SUM(CASE WHEN Expiration > Getdate() AND Expiration  < @AsOfDate THEN COALESCE(OriginalAmount,0) + COALESCE(Transactions,0) ELSE 0 END)

    Colocando o else 0 no final, se não obedecer entre as condições do meu case será 0

    Obrigada

    • Marcado como Resposta Thaís Sakamoto quarta-feira, 19 de abril de 2017 12:56
    quarta-feira, 19 de abril de 2017 12:56