Suponha que queira uma coluna calculada como no exemplo abaixo:
Que ele calcule o acumulado dos dias (datas) anteriores, além dele próprio:
+----------------------------+
| data | valor | acumulado |
+----------------------------+
| 1 | 5 | 5 |
| 2 | 7 | 12 |
| 2 | 7 | 19 |
Que ele calcule o acumulado dos dias (datas) anteriores, além dele próprio:
+----------------------------+
| data | valor | acumulado |
+----------------------------+
| 1 | 5 | 5 |
| 2 | 7 | 12 |
| 2 | 7 | 19 |
+----------------------------+
Fazendo campo acumulado
-- criamos a tabela temporária
-- criamos a tabela temporária
drop table #teste
create table #teste (
create table #teste (
data int,
valor int,
ac int,
)
-- carregamos o exemplo
insert into #teste values(1,9,null)
insert into #teste values(2,10,null)
insert into #teste values(3,11,null)
insert into #teste values(4,14,null)
valor int,
ac int,
)
-- carregamos o exemplo
insert into #teste values(1,9,null)
insert into #teste values(2,10,null)
insert into #teste values(3,11,null)
insert into #teste values(4,14,null)
-- atualizamos o campo "ac" com a soma com valores com a data anterior.
update #teste
set ac = (select sum(valor) from #teste where data <= a.data)
from #teste a
/*
O update acima diz o seguinte:
atualize o campo ac do primeiro registro, com o subselect, onde o subselect é a soma
de todos os valores que tenham a data (da tabela #teste so subselect) igual, ou menor que a data
da tabela #teste externa
*/
-- verificamos o resultado
select * from #teste
Dúvidas ou curiosidade, me perguntem!
Nenhum comentário :
Postar um comentário