GARANTIR DESCONTO

Fórum SUM em sql retorna só o primeiro registro. #270870

03/03/2005

0

Olá

Estou tentando somar um campo de uma tabela, mas só estou obtendo o valor do primeiro registro.
Estou usando assim:

select CODNSI, NPCNSI, SUM(QTDNSI) from ESANSI
Where NPCNSI BETWEEN 45269 and 45372
Group by CODNSI, NPCNSI

Era para retornar um valor maior que 5000. Mas só retorna 12 (que é o valor do primeiro registro).
Podem me dar uma mão?


Ivonei

Ivonei

Responder

Posts

03/03/2005

Hebrao

Ivonei,

Não há nada de erado com seu comando SQL.
Verifique quantos registros existem no banco de dados com as condições que vc quer. Ex:

select CODNSI, NPCNSI, QTDNSI from ESANSI
Where NPCNSI BETWEEN 45269 and 45372

As vezes sua condição between está com um intervalo muito pequeno...

Outra tentativa seria tente trocar o between por >= e <=. EX:

select CODNSI, NPCNSI, SUM(QTDNSI) from ESANSI
Where NPCNSI >= 45269 and NPCNSI <= 45372
Group by CODNSI, NPCNSI

Sei que não deveria fazer diferença, mas não custa tentar, né?
Só por curiosidade : Qual banco de dados está usando?

Espero ter ajudadode alguma forma.

[]´s

Heber


Responder

Gostei + 0

04/03/2005

Arc

Caro Ivonei...
olhando o codigo, a principio, ele em si, não tem nada de errado, mas fica dificil dizer o por que do erro sem saber o significado dos campos
Pelo que estou vendo, imagino que, vc deve estar tendo como resposta varias linhas, com valores pequenos pois seu select está agrupado pelo codigo ´CODNSI´ e pelo campo ´NPCNSI´, então para cada ´CODNSI´ ou ´NPCNSI´ diferentes o select vai retornar uma soma diferente, independente da condição BETWEEN


Responder

Gostei + 0

04/03/2005

Ivonei

Caro Ivonei... olhando o codigo, a principio, ele em si, não tem nada de errado, mas fica dificil dizer o por que do erro sem saber o significado dos campos Pelo que estou vendo, imagino que, vc deve estar tendo como resposta varias linhas, com valores pequenos pois seu select está agrupado pelo codigo ´CODNSI´ e pelo campo ´NPCNSI´, então para cada ´CODNSI´ ou ´NPCNSI´ diferentes o select vai retornar uma soma diferente, independente da condição BETWEEN


Estou usando o firebird e a tabela é referente aos itens das NFiscais. o NPCNSI é o num da NF e CODNSI é o código do produto. Pelo que você está dizendo, eu poderia fazer assim:

[color=green:1722fc8814]select CODNSI, NPCNSI, SUM(QTDNSI) from ESANSI
Where NPCNSI= 45269
Group by CODNSI, NPCNSI [/color:1722fc8814]

Que continuaria mostrando apenas o total do primeiro registro. Pois os CODNSI são num. diferentes. É isto? Então como posso resolver? :?

Até +


Responder

Gostei + 0

04/03/2005

Arc

Se vc quer a soma do intervalo das notas ´45269´ e ´45372´ é só usar :

select SUM(QTDNSI) from ESANSI
Where NPCNSI BETWEEN 45269 and 45372.

Da forma como vc fez, ele mostra a soma por nota


Responder

Gostei + 0

04/03/2005

Ivonei

Se vc quer a soma do intervalo das notas ´45269´ e ´45372´ é só usar : select SUM(QTDNSI) from ESANSI Where NPCNSI BETWEEN 45269 and 45372. Da forma como vc fez, ele mostra a soma por nota


Bingo. Eu pensei que tinha de colocar no Select, todos os campos que utilizo na query.
Na verdade o que eu precisava é saber o total de um determinado produto que está nos pedidos em aberto (que não foi gerado NF ainda). Resolvi o problema com o seguinte código:

Select SUM(QTDNSI) from esansi A
INNER JOIN esanst B ON A.codnsi=:CODIGO AND A.NPCNSI=B.NPCNST AND B.NNFNST IS NULL

Onde
ESANST: Tabela de Pedidos;
ESANSI: Tabela de Ítens do Pedido;

Muito obrigado. :)


Responder

Gostei + 0

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

Aceitar