Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tiago.uepa

Utilizar varias linhas retornadas pelo NVL

Recommended Posts

Boa noite galera,

 

Desculpe minha pergunta, mas já quebrei bastante a cabeça e não encontro a solução.
Tenho um relatório onde preciso ler o centro de resultado do rateio caso exista, se não, ler o centro de resultado do lançamento. Então utilizei o NVL:

NVL(   (SELECT R1.CODCENCUS
                      FROM TGFRAT R1
                      JOIN TGFFIN F1 ON (R1.NUFIN=(CASE WHEN F1.ORIGEM = 'E' THEN F1.NUNOTA ELSE F1.NUFIN END))
                      WHERE F1.NUFIN  = F.NUFIN
                      GROUP BY  R1.CODCENCUS)

           , F.CODCENCUS)

 

Executando apenas o select o resultado é exibido corretamente:

2020209
2010301

Mas quando uso o retorno do NVL  para a query acima vem o erro: ORA-01427: a subconsulta de uma única linha retorna mais de uma linha

Se eu digito os resultados manualmente a consulta funciona.


 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que um subselect como coluna só pode retornar um valor , a solução depende de alguns fatores, como :

 

O sub sql está certo ?

Tenho dados duplicados ?

Posso ter dados duplicados ?

Se posso quer fazer neste caso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Motta, 
 

Então pelo que vi o problema está na saída do NVL, sem o NVL o relatório funciona. 
O sub sql está certo, não tenho dados duplicados, poderia ter dados duplicados pois na query acima estou utilizando operador IN, fiz os testes digitando os dados no lugar no NVL e funcionou.
Você comentou do subselect como coluna só pode retornar um valor, vou verificar se consigo tratar o retorno transformando em linha com separador ',' 
Vou testar e posto o resultado.

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde,

 

Fiz uma tentativa com o LISTAGG, e consegui eliminar o erro: ORA-01427: a subconsulta de uma única linha retorna mais de uma linha

agora retorna em uma unica linha, mas a query acima não lê, talvez alguma formatação resolva? tentei usar to_char, to_number mas não foi..

 

NVL(   (SELECT LISTAGG(R1.CODCENCUS, ',')
                WITHIN GROUP (ORDER BY R1.CODCENCUS)    
                FROM TGFRAT R1
                  JOIN TGFFIN F1 ON (R1.NUFIN =(CASE WHEN F1.ORIGEM = 'E' THEN F1.NUNOTA ELSE F1.NUFIN END))
                  WHERE F1.NUFIN  = F.NUFIN
             )
        , F.CODCENCUS)

 

resultado em unica linha: 

2010301,2020209

Compartilhar este post


Link para o post
Compartilhar em outros sites
Citar

mas a query acima não lê

 

¡¿!?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, 
Não lê. Eu mudei o rateio para apenas 1 e assim ele lê, então é como ele não reconhecer depois da virgula, ou reconhecer tudo como uma unica string.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.