Fórum Porque nessa Query os dados se repetem? #59376

25/01/2008

0

Olá Boa Tarde. Eu fiz uma query para somar a quantidade de venda dos produtos, mas elas se repetem. Alguém poderia me ajudar e dizer porque isso acontece. Veja:
SELECT DISTINCT V.codigo_produto, P.DESCRICAO,SUM(QUANTIDADE) AS QUANT FROM PRODUTO P INNER JOIN VENDA_ITEM V ON P.CODIGO = V.CODIGO_PRODUTO GROUP BY V.codigo_produto, P.DESCRICAO, V.QUANTIDADE ORDER BY V.QUANTIDADE DESC



Itaqui

Itaqui

Responder

Posts

25/01/2008

Aroldo Zanela

Colega,

Tente assim:

SELECT 
  V.codigo_produto, 
  P.DESCRICAO,
  SUM(QUANTIDADE) AS QUANT
FROM 
  PRODUTO P 
INNER JOIN 
  VENDA_ITEM V ON P.CODIGO = V.CODIGO_PRODUTO
GROUP BY 
  V.codigo_produto, 
  P.DESCRICAO
ORDER BY 
  V.QUANTIDADE DESC



Responder

Gostei + 0

25/01/2008

Itaqui

Olá. Então, assim eu já tinha tentado fazer, não executa. Tenho que colocar a quantidade dentro do Group By. O problema, parece, está relacionado com a ordenação por quantidade.
Obrigado


Responder

Gostei + 0

25/01/2008

Aroldo Zanela

Colega,

Da forma que eu coloquei vai executar corretamente, mas se você colocar a quantidade no agrupamento (group by), certamente irão ocorrer repetições. Você testou?


Responder

Gostei + 0

28/01/2008

Itaqui

Bom Dia. Conforme eu disse, da maneira que vc. colocou aqui não executa. Pede que a quantidade seja colocada na cláusula Group By. Veja o erro :
Invalid expression in the ORDER BY clause (not contained in either an aggregate function or the GROUP BY clause).

No final de semana eu testei exaustivamente e percebi que um campo que tenha a cláusula Sum não pode ser ordenada. Só se existir outras maneiras para isso.
Obrigado


Responder

Gostei + 0

28/01/2008

Aroldo Zanela

Colega,

Para ordenar por um campo de agregação basta utilizar seu alias. Desculpe-me então, pois no meu primeiro exemplo eu me esqueci disso. Veja um exemplo testado com FB 2.0.

select
    v.pro_id codigo,
    p.pro_descricao descricao,
    sum(v.veni_quantidade) qtde
from
    vendas_itens v
inner join
    produtos p
on
    (v.pro_id=p.pro_id)
group by
    v.pro_id,
    p.pro_descricao
order by
    qtde



Responder

Gostei + 0

28/01/2008

Itaqui

Não, se colocar o aliás não executa. Já tentei de todas as formas. Talvez seja a versão do Banco que não permita isso. Aqui tenho o FB versão
1.5.3.4870.

Um abraço


Responder

Gostei + 0

28/01/2008

Aroldo Zanela

Colega,

É bem estranho isso, pois aqui consigo fazer até com DBFs (xBase) e tenho certeza de ter aplicações com FB 1.5 usando esses recursos.


Responder

Gostei + 0

06/06/2008

Itaqui

Boa Tarde, estou ressussitando um tópico de Janeiro deste ano porque ainda não obtive resposta para o meu problema. Se alguém puder me ajudar. Meu banco é o Firebird 1.5


Responder

Gostei + 0

06/06/2008

Aroldo Zanela

Colega,

Comprime o banco de dados e manda para o meu e-mail: zanela_zanela@yahoo.com.br


Responder

Gostei + 0

07/06/2008

Emerson Nascimento

SELECT
  V.codigo_produto, P.DESCRICAO,
  SUM(V.QUANTIDADE) AS QUANT
FROM
  VENDA_ITEM V
INNER JOIN
  PRODUTO P ON P.CODIGO = V.CODIGO_PRODUTO
GROUP BY
  V.codigo_produto, P.DESCRICAO
ORDER BY
  3 DESC



Responder

Gostei + 0

09/06/2008

Itaqui

Boa Tarde. Agora sim, deu certo. Só não entendi a última linha: ´3 DESC´; sei que ela está ordenando em ordem descendente, do maior para o menor. Mas porque da maneira que nós estámos fazendo não dava certo.

Muito obrigado


Responder

Gostei + 0

09/06/2008

Emerson Nascimento

o FB 1.5 não aceita o uso do alias do campo na ordenação, então é preciso usar o número do campo (no caso, o terceiro campo).

então, ali está ordenando pelo terceiro campo, em ordem decrescente.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar