Aprenda PL/SQL

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
  

Mensagemem Qui, 30 Nov 2017 7:53 am

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

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+
xprata
Localização: São Paulo - SP

Mensagemem Qui, 30 Nov 2017 8:06 am

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?
DanielNN
Localização: Fortaleza - CE

att,

Daniel N.N.

Mensagemem Qui, 30 Nov 2017 9:06 am

Obrigado pelor retorno....seguinte...

Se o campo c3 = 0

Preciso fazer : select c1,c2,c5,c6,c7 from .....
Se o campo c3 <> 0
Preciso fazer : select c1,c2,c8,c9,c10 from .....
xprata
Localização: São Paulo - SP

Mensagemem Qui, 30 Nov 2017 9:13 am

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

Código: Selecionar todos
select c1,c2,c5,c6,c7
  from .....
WHERE campo c3 = 0
UNION ALL
select c1,c2,c8,c9,c10
  from .....
WHERE campo c3 <> 0  ;
DanielNN
Localização: Fortaleza - CE

att,

Daniel N.N.

Mensagemem Qui, 30 Nov 2017 9:34 am

Dei este exemplo para facilitar o entendimento....

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

Exemplo:

select c1,c2,
se c3=0
c4-c10 x,c5-c10 y
else
c4-c3 x,c5-c3 y
,c11,c12, mais outras colunas...
from...
xprata
Localização: São Paulo - SP

Mensagemem Qui, 30 Nov 2017 9:47 am

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.
Código: Selecionar todos
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....
DanielNN
Localização: Fortaleza - CE

att,

Daniel N.N.

Mensagemem Qui, 30 Nov 2017 9:53 am

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
xprata
Localização: São Paulo - SP

Mensagemem Qui, 30 Nov 2017 10:09 am

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).
DanielNN
Localização: Fortaleza - CE

att,

Daniel N.N.



Voltar para PL/SQL

Quem está online

Usuários navegando neste fórum: Google [Bot] e 3 visitantes