GARANTIR DESCONTO

Fórum Comandos SQL #269895

23/02/2005

0

Ola!

Estou tentando fazer uma consulta no SQL 2000

Tabela: Fatura
Campos: Contrato, Nota Fiscal, Valor
registros:
[u:182ae9177d]contrato[/u:182ae9177d] , [u:182ae9177d]Nota Fiscal[/u:182ae9177d] , [u:182ae9177d]Valor[/u:182ae9177d]
122 , 00089 , 55,00
122 , 00090 , 39,00
122 , 00091 , 39,00
123 , 00092 , 349,00
123 , 00093 , 225,00
123 , 00094 , 318,00
124 , 00095 , 209,00

Quando uso no banco access:
Select Contrato, max(NotaFiscal) as NotaFiscal, Last(Valor) as Valor
From fat
Group by Contato
resultado:

[u:182ae9177d]contrato[/u:182ae9177d] , [u:182ae9177d]Nota Fiscal[/u:182ae9177d] , [u:182ae9177d]Valor[/u:182ae9177d]
122 , 00091 , 39,00
123 , 00093 , 318,00
124 , 00094 , 209,00

no SQL 2000 não existe a opçao LAST. Então usei:
Select Contrato, max(NotaFiscal) as NotaFiscal, max(Valor) as Valor
From fat
Group by Contato
resultado:

[u:182ae9177d]contrato[/u:182ae9177d] , [u:182ae9177d]Nota Fiscal[/u:182ae9177d] , [u:182ae9177d]Valor[/u:182ae9177d]
122 , 00091 , 55,00
123 , 00093 , 349,00
124 , 00094 , 209,00

Estou querendo pegar a ultima fatura de cada contrato . Mais o Valor que esta aparecendo não e o Ultimo e sim o Maximo.

Desde ja Agradeço a todos.


Iranilson

Iranilson

Responder

Posts

23/02/2005

Fer_nanda

Não entendi sua dúvida.
Se seus registros são esses
contrato , Nota Fiscal , Valor
122 , 00089 , 55,00
122 , 00090 , 39,00
122 , 00091 , 39,00
123 , 00092 , 349,00
123 , 00093 , 225,00
123 , 00094 , 318,00
124 , 00095 , 209,00

essa select
Select Contrato, max(NotaFiscal) as NotaFiscal, Last(Valor) as Valor 
From fat 
Group by Contato 


deveria trazer:

contrato , Nota Fiscal , Valor
122 , 00091 , 39,00
123 , 00094 , 318,00
124 , 00095 , 209,00

e não

contrato , Nota Fiscal , Valor
122 , 00091 , 39,00
123 , 00093 , 318,00
124 , 00094 , 209,00

Se está correto o que estou pensando vc deve retirar o max(valor), deve ficar assim

Select Contrato, max(NotaFiscal) as NotaFiscal, Valor
From fat 
Group by Contato 



Até


Responder

Gostei + 0

24/02/2005

Iranilson

Oi Fer_nanda

Os registro devirião ser exibido assim:
contrato , Nota Fiscal , Valor
122 , 00091 , 39,00
123 , 00094 , 318,00
124 , 00095 , 209,00

isto esta correto. So que o comando que vc passou não funciona

Select Contrato, Max(notafiscal)as NotaFiscal, Valor
From Fat
Group by Contrato

Dar o seguinte erro:
Column ´Valor´ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Se eu colocar o Valor em GROUP BY vai agrupar os valores tambem:
contrato , Nota Fiscal , Valor
122 , 00089 , 55,00
122 , 00091 , 39,00
123 , 00092 , 349,00
123 , 00093 , 225,00
123 , 00094 , 318,00
124 , 00095 , 209,00

e ficaria errado, eu quero assim:
contrato , Nota Fiscal , Valor
122 , 00091 , 39,00
123 , 00094 , 318,00
124 , 00095 , 209,00


Responder

Gostei + 0

24/02/2005

Andremuller

todas as colunas que não fazem parte da agregação devem sempre estar na cláusula group by. Inclua valor nessa cláusula

Select Contrato,  Valor, max(NotaFiscal) as NotaFiscal
From fat
Group by Contato, Valor



Responder

Gostei + 0

25/02/2005

Iranilson

Ola Pessoal

Acho que vc não entederão, eu quero que apareça o ultimo registro de cada Contrato, não quero o maximo, quero o ultimo. Ou seja o Campo Cantrato deve estar na clausula group by, mais os demais campos como valor não poderão entrar nessa clausa ja que os mesmo apresentam valores diferentes.

Ex:
O Nome da Tabela e: FAT
Os registros da Tabela são estes:

contrato , Nota Fiscal , Valor
122 , 00089 , 55,00
122 , 00090 , 39,00
122 , 00091 , 39,00
123 , 00092 , 349,00
123 , 00093 , 225,00
123 , 00094 , 318,00
124 , 00095 , 209,00

quero que fique assim:

contrato , Nota Fiscal , Valor
122 , 00091 , 39,00
123 , 00094 , 318,00
124 , 00095 , 209,00


Estou usando o Microsoft SQL Server 2000.


Responder

Gostei + 0

25/02/2005

Andremuller

Pelo que entendi o campo nota fiscal é único. Então daria pra fazer da seguinte forma

select contrato, notafiscal, valor
from fat fat1
where notafiscal in
(
   select max(notafiscal)
   from fat fat2
   group by contrato
)


a vantagem de não usar nenhuma função é que tu não fica preso a utilização de determinado banco


Responder

Gostei + 0

25/02/2005

Iranilson

Valeu! Perfeito.

Descupe ter complicado.

Obrigado mais uma vez


Responder

Gostei + 0

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

Aceitar