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ódigoUpdate 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ódigoUpdate 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ódigoUpdate 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