Ir para conteúdo
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'

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente

...

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

...

 

Compartilhar este post


Link para o post
Compartilhar em outros 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..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por 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?
    • Por 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'  
    • Por 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.
       
    • Por 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';  
    • Por 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.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.