Array
(
)

update relacional

Decandido21
   - 27 jan 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

Emerson
   - 28 jan 2006

tente essa instrução:
#Código

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


Decandido21
   - 28 jan 2006

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

Emerson
   - 29 jan 2006

ah... entendi. você quer a maior compra e a data dessa maior compra...
tente assim:
#Código

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


Emerson
   - 29 jan 2006

ops! correção:
#Código

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