Select Usando Decode e SUM

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
batofao
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 40
Registrado em: Seg, 30 Ago 2010 9:47 am
Localização: Jundiai

Pessoal sera que alguém pode me ajudar ?

tenho o seguinte Select :

Selecionar tudo

 SELECT REP.PRODUTO,REE.EMISSOR, 
 
 REP.ATIVO/DECODE((SELECT SUM(ATIVO) 
 FROM REL_ENQUADRAMENTO_PRODUTO WHERE COD_REL_APURACAO_FORM = 9910 
 AND MARCACAO = 'MtM' AND TIPO_PRODUTO = 'Total' AND GRUPO NOT LIKE 'Total'),0,NULL,
 (SELECT SUM(ATIVO) FROM REL_ENQUADRAMENTO_PRODUTO WHERE COD_REL_APURACAO_FORM = 9910 
 AND MARCACAO = 'MtM' AND TIPO_PRODUTO = 'Total' AND GRUPO NOT LIKE 'Total')) ATIVO,
 
 
REP.PASSIVO/DECODE((SELECT SUM(PASSIVO) FROM REL_ENQUADRAMENTO_PRODUTO 
WHERE COD_REL_APURACAO_FORM =9910 AND MARCACAO = 'MtM' AND TIPO_PRODUTO = 'Total'
AND GRUPO NOT LIKE 'Total'),0,NULL,(SELECT SUM(PASSIVO) FROM REL_ENQUADRAMENTO_PRODUTO 
WHERE COD_REL_APURACAO_FORM = 9910 AND MARCACAO = 'MtM' AND TIPO_PRODUTO = 'Total' 
AND GRUPO NOT LIKE 'Total'))PASSIVO,   

REP.NET/DECODE((SELECT SUM(NET) 
FROM REL_ENQUADRAMENTO_PRODUTO WHERE COD_REL_APURACAO_FORM = 9910 AND MARCACAO = 'MtM' 
AND TIPO_PRODUTO = 'Total' AND GRUPO NOT LIKE 'Total'),0,NULL,(SELECT SUM(NET) 
FROM REL_ENQUADRAMENTO_PRODUTO WHERE COD_REL_APURACAO_FORM = 9910 AND MARCACAO = 'MtM' 
AND TIPO_PRODUTO = 'Total' AND GRUPO NOT LIKE 'Total')) NET  
FROM REL_ENQUADRAMENTO_PRODUTO REP 

LEFT JOIN 

(SELECT EMISSOR FROM REL_ENQUADRAMENTO_EMISSOR WHERE GRUPO LIKE 'Renda Variável'
AND MARCACAO LIKE 'MtM'  AND COD_REL_APURACAO_FORM = 9910) REE 
      
       ON SUBSTR(TRIM(REE.EMISSOR),LENGTH(TRIM(REE.EMISSOR))-4,4) =  SUBSTR(REP.PRODUTO,1,4) 
       WHERE REP.COD_REL_APURACAO_FORM = 9910  AND REP.MARCACAO = 'Fechamento' 
       AND REP.TIPO_PRODUTO = 'Ação' AND REP.GRUPO LIKE 'Renda Variável' 
       ORDER BY EMISSOR 

esse select não fui eu que montei, e como ainda não tenho diminio na linguagem estou com a seguinte duvida, preciso usar o mesmo select que esta ai mais sem usar o SUM, preciso dos valores originais , porem quando eu tiro o sum ele fala que a consulta retorma mais de uma linha...


sera que alguém pode me ajudar ?


att,
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Cara ele deve ta berrando porque você ta usando o sum em um select que esta em um decode, como sendo o divisor de rep.ativo

Poste os resultados do teu select

e em sequencia do select abaixo pra podermos montar a solução conforme o que você deseja.

Selecionar tudo

SELECT SUM(ATIVO) 
 FROM REL_ENQUADRAMENTO_PRODUTO WHERE COD_REL_APURACAO_FORM = 9910 
 AND MARCACAO = 'MtM' AND TIPO_PRODUTO = 'Total' AND GRUPO NOT LIKE 'Total'
batofao
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 40
Registrado em: Seg, 30 Ago 2010 9:47 am
Localização: Jundiai

me desculpe a ignorancia, mais o resultado é muito grande e não estou conseguindo postar.. me recomenda alguma forma para postar ?

obg.
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Pode postar uma parte dos resultados de cada select apenas
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP

preciso usar o mesmo select que esta ai mais sem usar o SUM, preciso dos valores originais , porem quando eu tiro o sum ele fala que a consulta retorma mais de uma linha...


sera que alguém pode me ajudar ?
Oi batofao,

Você deve especificar melhor o que quer dizer com "valores originais" dos quais você precisa no retorno da consulta.

Este seu select está gerando um relatório de estatísticas, os valores dele também são "originais".

Em relação à exceção, ela é bem clara, a cláusula SELECT só aceita single-row subqueries (retorno de uma linha), quando você retira o SUM a sua subquery, que antes era single-row, já não é mais.

Se você ainda quer trabalhar com os dados da subquery, coloque ela na cláusula FROM, mas pelo que eu estou vendo, não sei pra que você usaria os resultados dela dessa forma, não faz muito sentido enquanto você não especificar melhor o que quer de retorno.

Em relação a utilizar subquery dentro de um decode que é divisão de um valor, o problema pode ocorrer quando o resultado da ultima subquery do DECODE retornar zero (pois divisão com divisor zero não existe), isto deve ser tratado como está sendo tratado na primeira subquery do DECODE...
batofao
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 40
Registrado em: Seg, 30 Ago 2010 9:47 am
Localização: Jundiai

ola pessoal, obrigado pela ajuda, na verdade fiz aqui uma consulta do zero e rodou perfeitamente, não vou mais precisar desse select que já estava pronto, mesmo assim obrigado pela atenção.


att,
Responder
  • Informação
  • Quem está online

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