Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Dúvida sobre IF aninhado

Pessoal,

Possuo a seguinte tabela carregada:

OPSituacaoAtraso
1203013
1203112
120321-4
1203305
120340-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

Labels (1)
1 Solution

Accepted Solutions
Anonymous
Not applicable
Author

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!

View solution in original post

6 Replies
julianacampag
Creator
Creator

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

Not applicable
Author

Oi André!

Qual seria o objetivo do seu If?

Talvez possamos inclusive contribuir com uma solução diferente de um If 😃

Anonymous
Not applicable
Author

Boa tarde

Obrigado pela ajuda, porém continua não testando a segunda parte.

Anonymous
Not applicable
Author

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:

Not applicable
Author

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.

Anonymous
Not applicable
Author

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!