update relacional

27/01/2006

ola amigos

Bem. Preciso atualizar a data e o valor da maior compra do cliente.

Estes campos(dt_maior_compra e vl_maior_compra) estão na tabela cliente e precisam ser atualizados de uma outra tabela faturamento( total_geral, data_nf) respectivamente

ja tentei com tabela temporaria mas nao consigo atualizar a data

Crate Table #ClienteTemp
(Codigo Int,
Data SmallDateTime,
Valor Float)

Insert CclienteTemp(Codigo,Data,Valor)
(Select Top 1 F.Cod_Cliente,F.Data_NF,Max(F.Total_Geral)
From Fatura F
Group By F.Cod_Cliente,F.Data_NF )

--atualiza a tabela temporaria na tabela real de cliente

Update Cliente Set
Cliente.Vl_Maior_Compra = ClienteTemp.Valor,
Cliente.Dt_Maior_Compra = ClienteTemp.Data
From Cliente,ClienteTemp
Where Cliente.Cod_Cli = ClienteTemp.Codigo

--apaga a tabela temporaria
Drop Table #ClienteTemp

GO


Decandido21

Respostas

28/01/2006

Emerson

tente essa instrução:
Update cli set
  cli.Vl_Maior_Compra = isnull(fat.Total_Geral,0),
  cli.Dt_Maior_Compra = isnull(fat.Data_NF,getdate())
from
  Cliente cli
left join
  (select
     Cod_Cliente,
     max(Total_Geral) Total_Geral,
     max(Data_NF) Data_NF
   from
     Fatura
   group by
     Cod_Cliente) fat
  on fat.Cod_Cliente = cli.Cod_Cli



Responder Citar

28/01/2006

Decandido21

Emerson!!! Obrigado pela atenção!!!

A tua string retornou sim o valor da maior compra.
Agora a data não é a maior data que preciso retornar e sim a data que foi feita esta compra(maior compra).

Consegui resolver com duas string uma para cada processo:

--1ª string atualiza o valor da maior compra na tabela cliente
Update cliente set
cliente.vl_Maior_Compra =
(select max(total_geral)
from fatura
where cod_cliente = cliente.cod_cliente)

--2ª string atualiza a data que foi feita a maior compra na tabela clientes
Update cliente set
cliente.dt_Maior_Compra =
(select top 1 data_nf
from fatura
where cod_cliente = cliente.cod_cliente
order by total_geral desc)

obrigado


Responder Citar

29/01/2006

Emerson

ah... entendi. você quer a maior compra e a data dessa maior compra...
tente assim:
Update cli set 
  cli.Vl_Maior_Compra = isnull(fat.Total_Geral,0), 
  cli.Dt_Maior_Compra = isnull(fat.Data_NF,getdate()) 
from 
  Cliente cli 
left join 
  (select top 1
     Cod_Cliente, 
     Total_Geral, 
     Data_NF
   from 
     Fatura 
   group by 
     Cod_Cliente
   order by Total_Geral desc) fat 
  on fat.Cod_Cliente = cli.Cod_Cli



Responder Citar

29/01/2006

Emerson

ops! correção:
Update cli set 
  cli.Vl_Maior_Compra = isnull(fat.Total_Geral,0), 
  cli.Dt_Maior_Compra = isnull(fat.Data_NF,getdate()) 
from 
  Cliente cli 
left join 
  (select top 1 
     Cod_Cliente, 
     Total_Geral, 
     Data_NF 
   from 
     Fatura 
   where
     Fatura.Cod_Cliente = cli.Cod_Cli
   order by
     Total_Geral desc) fat
  on fat.Cod_Cliente = cli.Cod_Cli



Responder Citar