Usuário com melhor resposta
CASE com IF

Pergunta
-
Boa tarde
tenho a seguinte situação
Preciso comparar duas datas e no final temos a seguinte situação
tabela 1 - solicitação de compra
1- Cod solic
2- Criticidade ( 1-Normal / 2 -Emergencial)
3-Cod Produto
4- data solic
tabela 2 - pedido de compra
1- cod pedido
2- valor
3-data pedido
Situação:
IF (Data solicit - Data pedido) <= 10 and criticidade = normal
contar o numero de vezes que aconteceu. com esse criterio
IF (Data solicit - Data pedido) <= 6 and criticidade = emergencial
contar o numero de vezes que aconteceu. com esse criterio
Respostas
-
Experimente fazer uns testes mais ou menos dessa forma:
with CTE_DateDiff as ( select datediff(day, s.DataSolic, p.DataPedido) as QtdeDias, s.Criticidade from TblPedidos as p inner join TblSolicitacoes as s on s.CodSolic = p.CodSolic ) select count(case when Criticidade = 1 then 1 end) as Normal, count(case when QtdeDias <= 6 and Criticidade = 2 then 1 end) as Emergencial from CTE_DateDiff where QtdeDias <= 10
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Robson William Silva quarta-feira, 27 de julho de 2016 20:17
- Marcado como Resposta Robson William Silva quinta-feira, 28 de julho de 2016 17:17
-
Bom dia,
Considerando que devem ser consideradas eventuais solicitações sem pedido, e que nesses casos deve ser utilizada a data atual para calcular a quantidade de dias, experimente mais ou menos dessa forma:
with CTE_DateDiff as ( select datediff(day, s.DataSolic, coalesce(p.DataPedido, current_timestamp)) as QtdeDias, s.Criticidade from TblSolicitacoes as s left join TblPedidos as p on p.CodSolic = s.CodSolic ) select count(case when QtdeDias <= 10 and Criticidade = 1 then 1 end) as Normal, count(case when QtdeDias <= 6 and Criticidade = 2 then 1 end) as Emergencial, count(1) as Total from CTE_DateDiff
Espero que ajudeAssinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 29 de julho de 2016 15:11
- Marcado como Resposta Robson William Silva sexta-feira, 29 de julho de 2016 16:45
Todas as Respostas
-
Gildo,
Acredito que você poderia aplicar esta lógico no seu Select fazendo uso do comando Case.
A partir do SQL Server 2012 podemos utilizar o comando IIF dentro do bloco Select, também pode ser uma solução.
Sua dúvida esta em como montar esta condição dentro do Select? Eu particularmente para este tipo de cenário prefiro utilizar o Case.
Agora outra possibildade seria fazer uso da função DateDiff ou DateAdd dentro do Select em conjunto com o Case, veja se este exemplo ajuda:
Declare @DataAnterior Date, @DataAtual Date = GetDate() Set @DataAnterior=GetDate()-5 Select Case(DATEDIFF(d,@DataAnterior,@DataAtual)) When 1 Then 'Um dia' When 5 Then 'Cinco Dias' When 10 then 'Dez dias' End Comparacao
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
-
Gildo,
Então neste caso, você vai poder fazer o Select de acordo com a diferença de dias, algo similar a isso:
Declare @DataAnterior Date, @DataAtual Date = GetDate() Set @DataAnterior=GetDate()-5 Select Case(DATEDIFF(d,@DataAnterior,@DataAtual)) When 1 Then (Select Count(*) from ..... Where .....) When 5 Then (Select Count(*) from ..... Where .....) When 10 then (Select Count(*) from ..... Where .....) End Comparacao
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Boa tarde,
gildo_santos, qual(is) coluna(s) deve(m) ser utilizada(s) para fazer o relacionamento entre a tabela de solicitação de compra e a tabela de pedido de compra?
Assinatura: http://www.imoveisemexposicao.com.br
-
-
Experimente fazer uns testes mais ou menos dessa forma:
with CTE_DateDiff as ( select datediff(day, s.DataSolic, p.DataPedido) as QtdeDias, s.Criticidade from TblPedidos as p inner join TblSolicitacoes as s on s.CodSolic = p.CodSolic ) select count(case when Criticidade = 1 then 1 end) as Normal, count(case when QtdeDias <= 6 and Criticidade = 2 then 1 end) as Emergencial from CTE_DateDiff where QtdeDias <= 10
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Robson William Silva quarta-feira, 27 de julho de 2016 20:17
- Marcado como Resposta Robson William Silva quinta-feira, 28 de julho de 2016 17:17
-
Boa tarde
Realmente ficou muito bom, mais preciso de mais um informação..
Saber o numero total de solicitações de compra .. por exemplo
teve 10 solicitações no total
e 5 foram dentro critério criticidade = 5 e dias <6
e 5 foram foram do critério
obrigado
-
Bom dia,
Considerando que devem ser consideradas eventuais solicitações sem pedido, e que nesses casos deve ser utilizada a data atual para calcular a quantidade de dias, experimente mais ou menos dessa forma:
with CTE_DateDiff as ( select datediff(day, s.DataSolic, coalesce(p.DataPedido, current_timestamp)) as QtdeDias, s.Criticidade from TblSolicitacoes as s left join TblPedidos as p on p.CodSolic = s.CodSolic ) select count(case when QtdeDias <= 10 and Criticidade = 1 then 1 end) as Normal, count(case when QtdeDias <= 6 and Criticidade = 2 then 1 end) as Emergencial, count(1) as Total from CTE_DateDiff
Espero que ajudeAssinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 29 de julho de 2016 15:11
- Marcado como Resposta Robson William Silva sexta-feira, 29 de julho de 2016 16:45
-
Bom dia,
Considerando que devem ser consideradas eventuais solicitações sem pedido, e que nesses casos deve ser utilizada a data atual para calcular a quantidade de dias, experimente mais ou menos dessa forma:
with CTE_DateDiff as ( select datediff(day, s.DataSolic, coalesce(p.DataPedido, current_timestamp)) as QtdeDias, s.Criticidade from TblSolicitacoes as s left join TblPedidos as p on p.CodSolic = s.CodSolic ) select count(case when QtdeDias <= 10 and Criticidade = 1 then 1 end) as Normal, count(case when QtdeDias <= 6 and Criticidade = 2 then 1 end) as Emergencial, count(1) as Total from CTE_DateDiff
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
Gapimex,
Só um detalhe eu não faria uso do Case dentro do Count, particularmente eu faria a contagem para cada condição do Case se for necessário.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]