Jump to content
Fórum Script Brasil
  • 0

Usando o comando case when com um resultado


Alessandro1972

Question

Pessoal boa tarde !!

Preciso de um help

Como posso usar o comando case when para testar dois valores.Ex:

dentro do meu select eu uso a condição:

DATEDIFF(DAY,FLAN.DATAVENCIMENTO,FLAN.DATABAIXA)AS ATRASO

eu preciso testar se o resultado da variavel ATRASO é maior ou menos a 30.

O objetivo principal é separar os clientes que pagam com até 30 dias de vencimento dos que pagam com mais de 30 dias apos o vencimento.

O CAMPO VALORPAGO é o mesmo para os dois casos.

Apenas preciso separar os valores atraves dessa checagem de dias.. por isso usei o DATEDIFF e depois no where eu comporo a variavel ATRASO. o Problema que

usando o where eu tenho que fazer duas consultas .

Agluem consegue me dar uma luz ??

Obrigado

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Bom dia Alessandro,

Tem como você fazer de duas formas, mas aí vai depender do resultado que deseja de retorno.

Fiz duas variáveis para fazer o exemplo. Caso queira testar, basta alterar as datas das variáveis.

- você poderá utilizar o CASE para retornar os dias e, por exemplo, uma mensagem informando se está com atraso ou não. Desta forma, o resultado trará todos os pagamentos. Esse aí seria o 1º select.

- Se quiser listar apenas as pessoas que estão em atraso, aí o resultado do alias ATRASO terá que estar depois da cláusula WHERE. Não tem como você criar um alias no select e depois testá-lo no where. Esse aí seria o 2º select.

Espero que ajude...

DECLARE @DATAVENCIMENTO datetime
DECLARE @DATABAIXA DATETIME

SET @DATAVENCIMENTO = '2011-07-20'
SET @DATABAIXA = '2011-09-01'

-- 1º
SELECT DATEDIFF(DAY,@DATAVENCIMENTO,@DATABAIXA) AS Dias, 
case WHEN DATEDIFF(DAY,@DATAVENCIMENTO,@DATABAIXA) > 30 THEN 'Atraso' else 'Ok' END AS ATRASO

-- 2º
SELECT DATEDIFF(DAY,@DATAVENCIMENTO,@DATABAIXA) AS ATRASO WHERE 
DATEDIFF(DAY,@DATAVENCIMENTO,@DATABAIXA) > 30

Link to comment
Share on other sites

  • 0
Bom dia Alessandro,

Tem como você fazer de duas formas, mas aí vai depender do resultado que deseja de retorno.

Fiz duas variáveis para fazer o exemplo. Caso queira testar, basta alterar as datas das variáveis.

- você poderá utilizar o CASE para retornar os dias e, por exemplo, uma mensagem informando se está com atraso ou não. Desta forma, o resultado trará todos os pagamentos. Esse aí seria o 1º select.

- Se quiser listar apenas as pessoas que estão em atraso, aí o resultado do alias ATRASO terá que estar depois da cláusula WHERE. Não tem como você criar um alias no select e depois testá-lo no where. Esse aí seria o 2º select.

Espero que ajude...

DECLARE @DATAVENCIMENTO datetime
DECLARE @DATABAIXA DATETIME

SET @DATAVENCIMENTO = '2011-07-20'
SET @DATABAIXA = '2011-09-01'

-- 1º
SELECT DATEDIFF(DAY,@DATAVENCIMENTO,@DATABAIXA) AS Dias, 
case WHEN DATEDIFF(DAY,@DATAVENCIMENTO,@DATABAIXA) > 30 THEN 'Atraso' else 'Ok' END AS ATRASO

-- 2º
SELECT DATEDIFF(DAY,@DATAVENCIMENTO,@DATABAIXA) AS ATRASO WHERE 
DATEDIFF(DAY,@DATAVENCIMENTO,@DATABAIXA) > 30

Obrigado pela ajuda.

o 1º select no meu caso é mais interessante.

Eu já tinha conseguido chegar até onde você me ensinou, agora o problema maior é que na mesma tabela eu tenho o campo chamado VALORPAGO.

eu queria que a condição no case checasse o seguinte:

se no datediff for maior de 30 dias ele joga o campo VALORPAGO com alias inadimplente

se no datediff for menor do que 30 dias ele joga o campo VALORPAGO em outro alias.

o motivo principal é que preciso numa consulta só separar o que foi pago em dia do que foi pago em atraso. Não sei se consigo isso com o case.

Se puder ajudar lhe agradeço mais uma vez.

Link to comment
Share on other sites

  • 0

Seria assim?

DECLARE @DATAVENCIMENTO datetime
DECLARE @DATABAIXA DATETIME

SET @DATAVENCIMENTO = '2011-07-20'
SET @DATABAIXA = '2011-09-01'

-- 1º
SELECT case WHEN DATEDIFF(DAY,@DATAVENCIMENTO,@DATABAIXA) > 30 THEN 'inadimplente' else 'Ok' END AS VALORPAGO

O alias é o "apelido" da coluna. Não tem como você trocar o alias. Coloquei o titulo da coluna como VALORPAGO. Aí dependendo da diferença da data, vai acrescentando "inadimplente" ou "ok".

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...