Comandos SQL

Delphi

23/02/2005

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

Curtidas 0

Respostas

Fer_nanda

Fer_nanda

23/02/2005

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é


GOSTEI 0
Iranilson

Iranilson

23/02/2005

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


GOSTEI 0
Andremuller

Andremuller

23/02/2005

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



GOSTEI 0
Iranilson

Iranilson

23/02/2005

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.


GOSTEI 0
Andremuller

Andremuller

23/02/2005

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


GOSTEI 0
Iranilson

Iranilson

23/02/2005

Valeu! Perfeito.

Descupe ter complicado.

Obrigado mais uma vez


GOSTEI 0
POSTAR