Jump to content
SAS Junior

[Resolvido] Condição Dentro do Where

Recommended Posts

Olá, sou novo aqui e em SQL Server, estou com um problema para buscar um resultado. 

Caso hoje seja segunda, trazer as instalações dos últimos 3 dias (sexta, sábado e domingo), caso não seja, trazer só os de ontem, tentei da forma abaixo e muitas outras e não consegui, desde já agradeço.    

SELECT codigoCliente AS [CÓD], CpfCnpj AS [CPF/CNPJ]
	,NomeFantasia as [NOME FANTASIA]
	,UPPER(NomeContato) as [NOME DE CONTATO] 
	,CASE WHEN CLI.DDDCelular IS NULL THEN 'NÃO TEM' ELSE DDDCelular END AS [DDD CEL]
	,CASE WHEN Celular IS NULL THEN 'NÃO TEM' ELSE Celular END AS CELULAR
	,CASE WHEN DDDTelefone IS NULL THEN 'NÃO TEM' ELSE DDDTelefone END AS [DDD TEL]
	,CASE WHEN Telefone IS NULL THEN 'NÃO TEM' ELSE Telefone END AS TELEFONE
	,DataInstalacao AS [INSTALAÇÃO]
	,DATEPART(weekday,DataInstalacao) as [DIASEMANA]
	,UPPER(Departamento) AS [DEPTO CAD]
	,upper(UsuarioCadastro) as [CADASTRADO POR]
	,CASE WHEN UPPER(EMAIL) IS NULL THEN 'NÃO TEM EMAIL' ELSE UPPER(EMAIL) END AS EMAIL

	FROM CLIENTE

	WHERE 
	(CASE WHEN (DATEPART(weekday,GETDATE()) = '2' THEN
		DATEPART(DAY, DataInstalacao) >= DATEPART(DAY, GETDATE()-3) 
			ELSE
				DATEPART(DAY, DataInstalacao) = DATEPART(DAY, GETDATE()-1) 
		END)
	AND MONTH(DataInstalacao) = MONTH(GETDATE())
	AND YEAR(DataInstalacao) = YEAR(GETDATE())
	AND Situacao = 'MAQUINA INSTALADA'

 

Share this post


Link to post
Share on other sites

Tente

...

and DATEPART(DAY, DataInstalacao) >=
(CASE WHEN (DATEPART(weekday,GETDATE()) = '2' THEN DATEPART(DAY, GETDATE()-3) 
            ELSE DATEPART(DAY, GETDATE()-1) 
        END)

...

 

Share this post


Link to post
Share on other sites

Brother, muito obrigado..

Ficou assim:

(DATEPART(DAY, DataInstalacao) >= (CASE WHEN (DATEPART(weekday,GETDATE()) = '2') 
THEN DATEPART(DAY, GETDATE()-3) ELSE DATEPART(DAY, GETDATE()-1) END))

pq não tinha nada antes..

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By osmarindy
      Boa noite Pessoal.
      Estou com o seguinte problema. Tenho duas tabelas principais "tblProjeto" e "tblItensProjeto", tenho que selecionar o projeto (tblProjeto) cujo o item 19 (tblItensProjeto) já esteja concluído (status 5) e que o item 15 (tblItensProjeto) não esteja concluído (status 5) e nem cancelado (status 4).
      Tenho o seguinte código:
      SELECT p.nmProjeto, l.nmLocalidade, f.usuario, r.nmRequisitante, p.dtSolicitacao,p.dtPrevisaoEntrega, s.nmStatus FROM tblProjeto as p inner join tblItensProjeto as i on i.idProjeto = p.idProjeto inner join tblLocalidade as l on l.idLocalidade = p.idLocalidade inner join tblFuncionario as f on f.idFuncionario = p.idFuncionario inner join tblRequisitante as r on r.idRequisitante = p.idRequisitante inner join tblStatusProj as s on s.idStatus = i.idStatus where (i.idAtividade = 19 and i.idStatus= 5 ) and (i.idAtividade = 15 and (i.idStatus <> 5 and i.idStatus <> 4))
      Se executo um  filtro de cada vez (where i.idAtividade = 19 and i.idStatus= 5 ) ou (i.idAtividade = 15 and (i.idStatus <> 5 and i.idStatus <> 4)) eles trazem resultados, mas quando deixo os dois filtros não funciona.
      Possuo 5 projetos que estão com a atividade 19 concluída e atividade 15 pendente. mas, não consigo com esse select trazer a informação. Alguém sabe como posso resolver?
    • By jackvinte
      Olá, sou nova por aqui.
       
      É possível fazer um select join dentro de um case, segue o que preciso:
       
      select m.ArquivoOrdemMov,m.ContadorAgenteMov,m.DataMov,m.SeqOrdemMov,m.SeqProduto,m.SaldoTotalMov,p.DescricaoProduto --,case when m.ArquivoOrdemMov='OC'then 'Preço' /*dentro do then preciso pegar o preço ->select ci.CustoOCItem from OCItem ci join OC c on c.SeqOC=ci.SeqOC*/ --else 'Sem valor'end from Mov m join MovFisica f on m.SeqMovFisica=f.SeqMovFisica join OC c on m.ContadorAgenteMov=c.ContadorAgenteOC join Produto p on m.SeqProduto=p.SeqProduto where m.ArquivoOrdemMov='OC' and c.SituacaoOC='FECHADA'  
    • By Luiz Henrique
      Tenho uma consulta entre várias tabelas, e 2 das clausulas é soma. Essa funciona SUM(t3.valor_servico*t3.quantidade)... Com essa junta não. SUM(CASE WHEN tab1.codigo = tab2.codigo THEN tab2.valor END) AS valor_pago Tentei fazer igual a de cima mas não rolou, então li a respeito do CASE, e tentei isso acima.
       
      Ocorre que o sistema tem opção de efetuar vários pagamentos em datas diferentes até que o valor total seja quitado.
      No caso, tenho uma tabela para armazenar o valor pago(valor), quem pagou (codigo) entre outras coisas, denominada como tab2 e a tab1 com outras informações, e o codigo.
       
      Não sei se é possível, mas estou precisando que esses 2 SUM estejam na mesma consulta porque fiz a condição acima sozinha para teste e funciona, então não faço ideia do que ocorre.
       
      o sql inteiro é esse, e preciso somar a  quantidade paga de cada ticket.
       
      $sql = mysqli_query($conexao, "SELECT *, SUM(st.valor_servico*st.quantidade) AS soma_servico FROM ticket t JOIN clientes c ON t.id_cliente = c.id_cliente JOIN servico_ticket st ON t.id_ticket = st.id_ticket JOIN status sts ON sts.id_status = t.status JOIN usuarios us ON us.id_user = t.atendente JOIN pagamento_ticket pgt WHERE t.id_loja ".$condLoja." AND ".$acao_status." GROUP BY t.id_ticket")or die (mysqli_error()); Obrigado.
       
    • By peterstefan
      Olá, estou com uma query aqui e preciso pegar de 2 campos diferentes os dados diferente de 0,  mais quanto tento no AND ele somente traz um resultado, o OR ele traz um dos campos com o valor 0, teria alguma forma de pegar os dados diferente de 0 dos dois campus?
      preciso pegar o idOrganizador diferente de 0 e o idPiloto diferente de 0 
       
      SELECT * FROM boletos WHERE proc = 0 AND idOrganizador !='0' AND idPiloto ='0';  
    • By FabianoSouza
      Quero fazer um select que me permita escolher em qual coluna a pesquisa deverá ocorrer.
      Na minha cabeça a coisa deveria ser com essa lógica:
       
      DECLARE 
      @strPesquisa varchar(60)
      , @colunaPesquisa varchar(60)
       
      SET @colunaPesquisa = 'nome'
      SET @strPesquisa = 'Al Pacino'
       
      SELECT * FROM minhaTabela WHERE
      @colunaPesquisa LIKE '%'+ @strPesquisa +'%'
       
      Claro que essa sintaxe não funciona. Mas a lógica seria essa.
       
      Com crio isso?
       
      Grato.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.