Ler retorno de varias linhas da subquery com NVL
05/07/2018
0
Bom dia 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 existir rateio, 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.
Já tentei utilizar o LISTAGG, fazendo retornar apenas uma linha :
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
mas a query acima não lê o resultado.
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 existir rateio, 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.
Já tentei utilizar o LISTAGG, fazendo retornar apenas uma linha :
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
mas a query acima não lê o resultado.
Tiago Souza
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)