Ir para conteúdo

POWERED BY:

Arquivado

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

Lilian Butkevicis

[Resolvido] Update

Recommended Posts

Olá pessoal.

 

 

Preciso de um help no seguinte sentido:

 

Se eu tenho uma tabela

 

cod**v_default

001**0,03568

002**0,05056

003**0,079465

 

Quero criar uma tabela temporária onde além dos campos cod e v_default eu tenha tbm v_min e v_max.

Sendo que o v_max = v_default (arredondado para 2 casas decimais)

e o meu v_min = v_default (arredondado para 2 casas decimais) do cod anterior

 

 

Ficaria assim para a tabela acima

 

cod**v_default*****v_min**v_max

 

001**0,03568*****0,0*****0,04

002**0,05056*****0,04****0,05

003**0,079465****0,05****0,08

 

obs: Para cod 1 o v_min tem que ser 0, pois não tem nenhum anterior

 

select

cod,

v_default,

convert(decimal,0) v_min,

round(v_default,2) v_max

into #tmp

from tabela_original

order by cod

 

Feito isso tempo que atualizar o campo v_min, mas como? :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lilian,

 

Para fazer o que você quer, não precisa realizar um update na tabela temporária. Se o campo cod é um sequencial (estou presumindo que sim), você pode fazer um sub-select, obtendo o valor do registro anterior. Para melhorar um pouco a performance do sub-select, use top 1. Veja o exemplo que criei:

 

create table #tmp_dados(
  codigo int identity(1,1),
  valor numeric(15,6)
)

insert into #tmp_dados(valor) values (0.03568)
insert into #tmp_dados(valor) values (0.05056)
insert into #tmp_dados(valor) values (0.079465)

select 
  codigo,
  valor,
  isnull((select top 1 isnull(cast(round(m.valor,2) as numeric(10,2)),0)
	   from #tmp_dados m 
	   where m.codigo<t.codigo
	   order by m.codigo desc),0) as v_min,
  cast(round(valor,2) as numeric(10,2)) as v_max 
from 
  #tmp_dados t

drop table #tmp_dados

 

Att

 

Rodrigo

Já viu o meu blog sobre sql server?...http://www.tsqlmaster.net

 

 

 

Olá pessoal.

 

 

Preciso de um help no seguinte sentido:

 

Se eu tenho uma tabela

 

cod**v_default

001**0,03568

002**0,05056

003**0,079465

 

Quero criar uma tabela temporária onde além dos campos cod e v_default eu tenha tbm v_min e v_max.

Sendo que o v_max = v_default (arredondado para 2 casas decimais)

e o meu v_min = v_default (arredondado para 2 casas decimais) do cod anterior

 

 

Ficaria assim para a tabela acima

 

cod**v_default*****v_min**v_max

 

001**0,03568*****0,0*****0,04

002**0,05056*****0,04****0,05

003**0,079465****0,05****0,08

 

obs: Para cod 1 o v_min tem que ser 0, pois não tem nenhum anterior

 

select

cod,

v_default,

convert(decimal,0) v_min,

round(v_default,2) v_max

into #tmp

from tabela_original

order by cod

 

Feito isso tempo que atualizar o campo v_min, mas como? :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodrigo, o campo do código não é sequencial, mas o post me ajudou muito. Só tive que ajustar aqui.

 

Valeu mesmo! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

P.S >> Visitei o seu blog. Mto legal, mais uma fonte de consulta!!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

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.