update relacional

27/01/2006

0

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

Decandido21

Responder

Posts

28/01/2006

Emerson Nascimento

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

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

29/01/2006

Emerson Nascimento

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

29/01/2006

Emerson Nascimento

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar