Ir para conteúdo
Fórum Script Brasil
  • 0

Usando o comando case when com um resultado


Alessandro1972

Pergunta

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 para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...