Ir para conteúdo

Arquivado

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

Jasonsv

[Resolvido] Multiplicação em Group By dentro de uma view

Recommended Posts

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

Seria ?

 

CATEGORIA PRODUTO QTDE
1         A       10
2         B       03
3         C       01 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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

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

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

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

×

Informação importante

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