Jasonsv 0 Denunciar post Postado Agosto 2, 2012 Bom dia, Tenho uma "View" que extrai dados de uma tabela e agrupa de acordo com a "Categoria" e "Produto". A Tabela contem as informações: ----------------------------------------------- CATEGORIA PRODUTO QTDE 1 A 5 2 B 3 3 C 1 1 A 2 2 B 1 ----------------------------------------------- A view está assim: ----------------------------------------------- SELECT CATEGORIA, PRODUTO, SUM(QTDE) AS PRODUCAO, FROM PRODUZIDOS GROUP BY CATEGORIA, PRODUTO ----------------------------------------------- Quanto executo gera os seguintes dados: ----------------------------------------------- CATEGORIA PRODUTO QTDE 1 A 7 2 B 4 3 C 1 ----------------------------------------------- Acontece que em vez de somar a "Qtde" preciso que seja multiplicado os valores, ou seja: Multiplicar linhas de acordo com o agrupamento. Isto é possível dentro de uma view? Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 2, 2012 Seria ? CATEGORIA PRODUTO QTDE 1 A 10 2 B 03 3 C 01 Compartilhar este post Link para o post Compartilhar em outros sites
Jasonsv 0 Denunciar post Postado Agosto 2, 2012 Isto mesmo, em vez de somar na linha: SUM(QTDE) AS PRODUCAO, Preciso que ele multiplique no agrupamento, para ficar com os valores que você colocou abaixo. Obrigado. Seria ? CATEGORIA PRODUTO QTDE 1 A 10 2 B 03 3 C 01 Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 2, 2012 select TABLESPACE_NAME , EMPTY_BLOCKS from USER_TABLES WHERE ROWNUM < 11 TABLESPACE_NAME EMPTY_BLOCKS ------------------------------ ---------------------- DADOS_ADV_160K 40 DADOSADV 24 DADOS_ADV_160K 40 DADOS_ADV_160K 40 DADOSADV 24 DADOS_ADV_160K 40 DADOSADV 24 DADOS_ADV_160K 40 DADOS_ADV_160K 40 DADOS_ADV_160K 40 10 linhas selecionadas select TABLESPACE_NAME , exp(sum(ln(EMPTY_BLOCKS))) EMPTY_BLOCKS from USER_TABLES where rownum < 11 GROUP BY TABLESPACE_NAME TABLESPACE_NAME EMPTY_BLOCKS ------------------------------ ---------------------- DADOS_ADV_160K 163840000000,0000000000000000000000000033 DADOSADV 13824,0000000000000000000000000000000001 Um tempo atrás vi um artigo que lembrava que a gente podia usar a propriedade do log para fazer produto de colunas. Deve ter de rolar um ROUND para deixar a coisa limpa. Compartilhar este post Link para o post Compartilhar em outros sites
Jasonsv 0 Denunciar post Postado Agosto 2, 2012 Isto mesmo Motta, executei a função que passou, porém aparece erro: ORA-01428: O argumento '0' está fora da faixa válida. O que pode ser? Obrigado. select TABLESPACE_NAME , EMPTY_BLOCKS from USER_TABLES WHERE ROWNUM < 11 TABLESPACE_NAME EMPTY_BLOCKS ------------------------------ ---------------------- DADOS_ADV_160K 40 DADOSADV 24 DADOS_ADV_160K 40 DADOS_ADV_160K 40 DADOSADV 24 DADOS_ADV_160K 40 DADOSADV 24 DADOS_ADV_160K 40 DADOS_ADV_160K 40 DADOS_ADV_160K 40 10 linhas selecionadas select TABLESPACE_NAME , exp(sum(ln(EMPTY_BLOCKS))) EMPTY_BLOCKS from USER_TABLES where rownum < 11 GROUP BY TABLESPACE_NAME TABLESPACE_NAME EMPTY_BLOCKS ------------------------------ ---------------------- DADOS_ADV_160K 163840000000,0000000000000000000000000033 DADOSADV 13824,0000000000000000000000000000000001 Um tempo atrás vi um artigo que lembrava que a gente podia usar a propriedade do log para fazer produto de colunas. Deve ter de rolar um ROUND para deixar a coisa limpa. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 2, 2012 A função LN não admite 0 Erro ao iniciar na linha 4 no comando select ln(0) from dual Relatório de erro: Erro de SQL: ORA-01428: o argumento '0' está fora da faixa válida 01428. 00000 - "argument '%s' is out of range" *Cause: *Action: Sendo 0 o produto seria zero. Teria de dar um tratamento nesta coluna Um select para colunas que tem valor 0 (subselect) union com o select passado, teria de testar Compartilhar este post Link para o post Compartilhar em outros sites
Jasonsv 0 Denunciar post Postado Agosto 2, 2012 Resolvido, segue: SELECT CATEGORIA, PRODUTO, exp(sum(ln(QTDE))), FROM PRODUZIDOS WHERE QTDE > 0 GROUP BY CATEGORIA, PRODUTO Muito obrigado pela ajuda, me resolveu um problemão, abraço. A função LN não admite 0 Erro ao iniciar na linha 4 no comando select ln(0) from dual Relatório de erro: Erro de SQL: ORA-01428: o argumento '0' está fora da faixa válida 01428. 00000 - "argument '%s' is out of range" *Cause: *Action: Sendo 0 o produto seria zero. Teria de dar um tratamento nesta coluna Um select para colunas que tem valor 0 (subselect) union com o select passado, teria de testar Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Agosto 2, 2012 Eu faria ... SELECT CATEGORIA, PRODUTO, exp(sum(ln(QTDE))) produto, FROM PRODUZIDOS p1 where not exists (SELECT FROM PRODUZIDOS p2 where p2.CATEGORIA = p1.CATEGORIA and p2.PRODUTO = p1.PRODUTO and p2.qtde = 0) union SELECT CATEGORIA, PRODUTO, 0 produto, FROM PRODUZIDOS p1 where exists (SELECT FROM PRODUZIDOS p2 where p2.CATEGORIA = p1.CATEGORIA and p2.PRODUTO = p1.PRODUTO and p2.qtde = 0) Compartilhar este post Link para o post Compartilhar em outros sites