Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Pessoal,
Possuo a seguinte tabela carregada:
OP | Situacao | Atraso |
12030 | 1 | 3 |
12031 | 1 | 2 |
12032 | 1 | -4 |
12033 | 0 | 5 |
12034 | 0 | -2 |
Estou tentando fazer o seguinte teste condicional para diferenciar os campos 'Situacao' e 'Atraso' respectivamente.
if(SituacaoOP=0, if(Atraso<=0, OP))
ou
if(SituacaoOP=0, if(Atraso>0, OP))
ou
if(SituacaoOP=1, if(Atraso<=0, OP))
ou
if(SituacaoOP=1, if(Atraso>0, OP))
Porém, em todas as expressões acima, sempre só o primeiro teste funciona (em azul).
O que estou fazendo de errado?
Grato
Pessoal,
Vejam só o que pode fazer um pequeno descuido.
Todas as formas de uso do IF estavam certos. O problema foi que eu estava dando LOAD separado nos campos que estavam sendo testados pelo IF!
Vejam os destaques em meu script abaixo:
LIB CONNECT TO 'DataPlus';
/* Prazo de entrega da indústria */
LOAD Ano, Mes, DataCriacaoOP, InicioOP, PrevTerminoOP,
DataEmissaoPed, DataEntregaPrevPed, PedidoVenda,
Cliente, OP, SituacaoOP, Atraso_SN, PrevisaoFeita,
PrazoIniciar, NotaFiscal,TerminoRealOP, Status, DescStatus;
SQL Select * from vw_PrazoEntregaOP;
/* OPs em aberto */
LOAD Ordem, DataAbertura, Usuario, UltimaAlteracao, Atraso_Aberto, MedVidOp;
SQL Select
oi.Ordem, o.DataAbertura, o.Usuario, o.Data as UltimaAlteracao,
(DATEDIFF(Day, o.DataAbertura, o.Data)) as MedVidOp,
(DATEDIFF(Day, o.Termino, GedDate()) as Atraso_Aberto
from OrdemItens oi, OrdemProducao o
Where
o.Fechada = 0 and
o.Cancelada = 0 and
o.Concluida = 0 and
oi.Ordem = o.Numero;
Obrigado pela ajuda pessoal, problema resolvido!
Olá André,
tenta assim:
if(SituacaoOP=0 and Atraso<=0, OP)
ou
if(SituacaoOP=0 and Atraso>0, OP)
ou
if(SituacaoOP=1 and Atraso<=0, OP)
ou
if(SituacaoOP=1 and Atraso>0, OP)
Espero ajudar
Oi André!
Qual seria o objetivo do seu If?
Talvez possamos inclusive contribuir com uma solução diferente de um If 😃
Boa tarde
Obrigado pela ajuda, porém continua não testando a segunda parte.
Ola Edécio,
Tento como base a tabela abaixo:
Veja o que espero do seguinte filtro em uma eventual consulta:
Quando eu usar: if(Situacao=0 and Atraso<=0, OP)
Mostraria:
Ou, quando eu usar: if(Situacao=1 and Atraso<=0, OP)
Mostraria:
Ou ainda, quando eu usar: if(Situacao=1 and Atraso>0, OP)
Mostraria:
Pelo o que entendi, você gostaria de criar 3 "categorias" para suas instruções, correto?
A ideia do If abaixo é utilizar flags para que você possa filtrar valores através de uma lista no QV.
Subsituí o campo SituacaoOP que você utilizou (imaginando que você quis mencionar a coluna Situacao) . Talvez esse fosse um dos problemas de não estar obtendo uma resposta esperada.
Tenta utilizar assim:
If( Situacao = 0 and Atraso <=0, 'Tipo 1',
If( Situacao = 1 and Atraso <=0, 'Tipo 2',
If( Situacao = 1 and Atraso >0, 'Tipo 3')))
Caso não funcione, tenta descrever um pouco mais o que você deseja. Pode passar a regra de negócio por trás do seu If mesmo
Cordialmente,
Edécio Santos.
Pessoal,
Vejam só o que pode fazer um pequeno descuido.
Todas as formas de uso do IF estavam certos. O problema foi que eu estava dando LOAD separado nos campos que estavam sendo testados pelo IF!
Vejam os destaques em meu script abaixo:
LIB CONNECT TO 'DataPlus';
/* Prazo de entrega da indústria */
LOAD Ano, Mes, DataCriacaoOP, InicioOP, PrevTerminoOP,
DataEmissaoPed, DataEntregaPrevPed, PedidoVenda,
Cliente, OP, SituacaoOP, Atraso_SN, PrevisaoFeita,
PrazoIniciar, NotaFiscal,TerminoRealOP, Status, DescStatus;
SQL Select * from vw_PrazoEntregaOP;
/* OPs em aberto */
LOAD Ordem, DataAbertura, Usuario, UltimaAlteracao, Atraso_Aberto, MedVidOp;
SQL Select
oi.Ordem, o.DataAbertura, o.Usuario, o.Data as UltimaAlteracao,
(DATEDIFF(Day, o.DataAbertura, o.Data)) as MedVidOp,
(DATEDIFF(Day, o.Termino, GedDate()) as Atraso_Aberto
from OrdemItens oi, OrdemProducao o
Where
o.Fechada = 0 and
o.Cancelada = 0 and
o.Concluida = 0 and
oi.Ordem = o.Numero;
Obrigado pela ajuda pessoal, problema resolvido!