Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lilian Butkevicis

Usar Group by no UPDATE

Recommended Posts

Olá! :mellow:

 

Estou com o seguinte problema.

Atualmente uma tabela é atualizada da seguinte forma:

 

update a

set campo = campo1 * campo2

from tabela as a

 

É necessário que seja feita uma alteração nesse update de maneira que o campo seja atualizado assim:

 

campo =sum(campo1 * campo2)

 

Como tenho que usar um SUM, o group by se faz necessário mas como ficaria???

 

Tentei de diversas maneiras aqui e cada hora um erro diferente!

 

Valeu pela ajuda galera

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lilian,

 

Fazer o que você está tentando naum é possível pois o SQL Server não aceita agregates no set de um update. Você sempre receberá o erro:

Server: Msg 157, Level 15, State 1, Line 4
An aggregate may not appear in the set list of an UPDATE statement.

Mas você pode contornar este problema, jogando os valores totalizados agrupados pela condição que você quer em uma tabela temporária e depois atualizando com um join. Veja o exemplo que montei abaixo:

 

create table #exemplo(
  nome varchar(20),
  valor1 numeric(10,2),
  valor2 numeric(10,2),
  valor_total numeric(10,2)
)

insert into #exemplo(nome,valor1,valor2) values ('Rodrigo',10.32,63.65)
insert into #exemplo(nome,valor1,valor2) values ('Rodrigo',11.32,63.65)
insert into #exemplo(nome,valor1,valor2) values ('Paulo',12.32,63.65)
insert into #exemplo(nome,valor1,valor2) values ('Paulo',13.32,63.65)
insert into #exemplo(nome,valor1,valor2) values ('Daniel',14.32,63.65)
insert into #exemplo(nome,valor1,valor2) values ('Daniel',14.32,63.65)
insert into #exemplo(nome,valor1,valor2) values ('Carol',20.32,63.65)
insert into #exemplo(nome,valor1,valor2) values ('Carol',30.32,63.65)

select 
  e.nome,sum(e.valor1*e.valor2) as valor
into #teste
from 
  #exemplo e
group by e.nome

update 
  #exemplo 
set valor_total=t.valor
from #teste t
join #exemplo e on (t.nome=e.nome)

select * from #exemplo

Aquele abraço e boa sorte!

 

Rodrigo

Conheça meu blog: http://www.tsqlmaster.net

 

 

 

 

 

Olá! :mellow:

 

Estou com o seguinte problema.

Atualmente uma tabela é atualizada da seguinte forma:

 

update a

set campo = campo1 * campo2

from tabela as a

 

É necessário que seja feita uma alteração nesse update de maneira que o campo seja atualizado assim:

 

campo =sum(campo1 * campo2)

 

Como tenho que usar um SUM, o group by se faz necessário mas como ficaria???

 

Tentei de diversas maneiras aqui e cada hora um erro diferente!

 

Valeu pela ajuda galera

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.