Decode para varias verificações

Dicas e truques sobre Oracle Reports Builder - modo gráfico ou modo caractere, ascii, arquivo .PRT, etc
Responder
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

Bom Dia
Se alguém puder ajudar, eu agradeço

Preciso fazer um decode, dentro de uma where, com varias validações
algo parecido com isso


1º Tenho uma lista de 6 pessoas físicas
que possui vários valores, que chamo de X, cada pessoa fisica tem 10 valores x

2º tenho uma pessoa fisica - que vai ser ligado aos 6 da 1º situação
essa pessoa fisica possui varios valores, que chamo de y1 até o y10.

Situaçao:

Os valores do X nunca pode ser igual aos do y1-y10.
Quando for igual não pode trazer a pessoa fisica.

alguém sabe como eu posso fazer isso?

Obrigada
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Hmm, não entendi muito bem.
Poste alguns exemplos mais práticos, dos dados e de como está esse teu decode.
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

Selecionar tudo

select pra.cd_pessoafisica, r.cd_pessoafisica
from( select pf.cd_pessoafisica,
             y1 A1,
             y2 A2,
             y3 B1,
             y4 B2,
             y5 DRBI2,
             y6 DRB1,
             y7 DRB2,
             y8 CW1,
             y9 CW2,
             y10 BW1,
             y11 BW2
        from pessoa_fisica pF
       where pf.cd_pessoafisica = :parametro)r,
   (select pra.cd_pra , pra.vl_pra,pf.cd_pessoafisica
   from pra pra,
        resultado re,
         pessoa_fisica pf
where re.nr_requisicao = :parametero.nr
  and pf.cd_pessoafisica = re.cd_pessoafisica)pra
where (decode(pra.vl_pra,greatest(pra.vl_pra,:p_vl_mfi),pra.cd_pra) = pra.cd_pra
        and  pra.cd_pra not in  r.A1
        and pra.cd_pra not in r.A2
        and pra.cd_pra not in r.B1
        and pra.cd_pra not in r.B2
        and pra.cd_pra not in r.DRBI1
        and pra.cd_pra not in r.DRBI2
        and pra.cd_pra not in r.DRB1
        and pra.cd_pra not in r.DRB2
        and pra.cd_pra  not in r.CW1
        and pra.cd_pra not in r.CW2
        and pra.cd_pra not in r.BW1
        and pra.cd_pra not in r.BW2)

   
Sei q não saiu muito certo, mais assim q estou tentando.

Obrigada
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Cara, ainda não compreendi 100%. Seria bom ter exemplos de dados das tabelas.
Qual problema deste select atual??
Até onde estou entendendo talvez seria bom utilizar um not "exists".
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

Lá vão os exemplos

valores x das 6 pf

Selecionar tudo

X          pf
ab22     123
ver        1234
ab33      456
rd22       4568
c11         4567
ab22        1235

Valor do y da pf principal

A1 -- ab22
A2  -- cw
B1  -- b
B2  -- w
DRBI2 - cdw
DRB1 - pow
DRB2 - pow2
CW1 - pde
CW2 - pder
BW1 - 123
BW2 - 24
 
as pf 123 e 1235 não poderiam aparecer no select, porque a pf principal tem um valor igual ao deles.

not "exists"? no proprio decode?
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Considerando os dados que você falou e pelo que entendi, poderia ser algo assim:

Selecionar tudo

select *
  from pf_menor pm
 where not exists (select 1
                     from pf_princial pp
                    where pp.y1 = pm.x
                       or pp.y2 = pm.x
                       ...
                       or pp.y10 = pm.x)
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

Vou fazer aqui, qualquer coisa eu retorno.

valeu pela ajuda
djoq
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 27 Jan 2012 8:16 am
Localização: Londres UK

Olá pessoal, estou fazendo um sql e empaquei no decode, alguém poderia me esclarecer porque ele não funciona desta forma:

Selecionar tudo

  and decode (:tipo, 'NASCIDO', to_char(dt_nasc,'mm') = :p_mês, 
                              'ADMITIDO', to_char(a.dt_admissao,'mm') = :p_mês) 
Deve ser coisa simples, mas meu conhecimento básico inicial não está me ajudando.Se alguém puder postar a código com a sintaxe correta, agradeço!!
Obrigada !! =)
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

Bom, acho q deveria fazer outro post. :)
Mais na minha opinião o que está errado seria isso.

São duas coisas.
deixa pra igualar o :p_mês, só no final.


você deveria fazer um extract para selecionar o mês,
extract(month from dt_nasc)

ex:

Selecionar tudo

where decode(:tipo, 'NASCIDO', extract(month from dt_nasc),'ADMITIDO',extract(month from A.DT_ADMISSAO))
= :P_mês
Se alguém puder me ajudar com o meu post também, iria agradecer muito. :)
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

'Se alguém puder me ajudar com o meu post também, iria agradecer muito. :)'
É sobre outro post, ok? :)
djoq
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 27 Jan 2012 8:16 am
Localização: Londres UK

Olá, deu certo, acabei criando outro post, e me mostraram a sintaxe correta lá.
Mesmo assim obrigada pela atenção.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 11 visitantes