Tem comando condicional para trazer mais de uma linha?

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
xprata
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 93
Registrado em: Ter, 06 Abr 2010 11:31 am
Localização: São Paulo - SP

Boas, preciso fazer uma condição para trazer determinados registros...exemplo:

Selecionar tudo

select c1,c2, case when c3 = 0 then c5,c6,c7
                                              else c8,c9,c10 end
from .....
O código acima serve só para exemplificar pois não funciona com mais de um campo...
Teria algum outro comando para executar a condição?
Obrigado e t+
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Olá xprata,

Não entendi exatamente. No seu exemplo , caso a campo c3 for 0, você quer trazer os campo c4,c5,c6 cada um em uma coluna só, ou cada um em sua coluna respectiva?
xprata
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 93
Registrado em: Ter, 06 Abr 2010 11:31 am
Localização: São Paulo - SP

Obrigado pelor retorno....seguinte...

Se o campo c3 = 0

Preciso fazer :

Selecionar tudo

select c1,c2,c5,c6,c7 from .....
Se o campo c3 <> 0
Preciso fazer :

Selecionar tudo

select c1,c2,c8,c9,c10 from .....
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Considerando que os tipos de c5 = c8 , c6 = c9 , c7 = c10 você pode fazer utilizar:

Selecionar tudo

select c1,c2,c5,c6,c7 
  from .....
 WHERE campo c3 = 0
 UNION ALL
select c1,c2,c8,c9,c10 
  from .....
 WHERE campo c3 <> 0  ;
xprata
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 93
Registrado em: Ter, 06 Abr 2010 11:31 am
Localização: São Paulo - SP

Dei este exemplo para facilitar o entendimento....

Mas preciso fazer cálculos com a coluna...
Se c3 = 0

Exemplo:

Selecionar tudo

select c1,c2,
if c3=0
   c4-c10 x,c5-c10 y
else
   c4-c3 x,c5-c3 y
,c11,c12, --mais outras colunas...
from...
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Mas é possível fazer os cálculos da forma que desejar , só precisa separar os selects do UNION(um se c3 = 0 e outro quando diferente) e manter o tipo de dados corretos para cada coluna do geral.

Selecionar tudo

select c1
        , c2
        , c5 - c6 x 
        , c7 + c4 y
  from .....
WHERE campo c3 = 0

UNION ALL

select c1
        , c2
        , c8 - c9 x  
        , c10 * c11 y
  from .....
WHERE campo c3 <> 0  ;
No exemplo acima o X e Y dos dois selects precisam retornar mesmo tipo, seja número, texto, data....
xprata
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 93
Registrado em: Ter, 06 Abr 2010 11:31 am
Localização: São Paulo - SP

A query em questão e muito grande e aplicando o union vai duplicar...
Mas vou fazer um teste com sua dica pra ver se vai rodar...
Obrigado
att
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

O tamanho de cada query não é importante. O importante é que os dados da primeira consulta seja diferente do da segunda para não ter duplicações indevidas.
Só reforçando em utilizar o UNION ALL(melhor desempenho), pois só o UNION vai tentar eliminar possíveis duplicações (como se fosse um distinct).
Responder
  • Informação
  • Quem está online

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