首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

数据库修改的有关问题

2012-01-29 
求一个数据库修改的问题表A结构如下示例字段aabbrq4307月1日347月2日457月3日347月4日657月5日657月6日657

求一个数据库修改的问题
表   A   结构如下示例
字段   aa     bb             rq
          43       07月1日
          347月2日
          457月3日
          347月4日
          657月5日
          657月6日
          657月7日
          407月8日
        ...           ...       ....
        ...           ...       ....  
怎么样算出7-2、7-3、7-4......的js这个字段
    其中7-2的BB等于7-1的BB加AA
    其中7-3的BB等于7-2的BB加AA
    其中7-4的BB等于7-3的BB加AA
      一直这样下去
    即今天的BB这个字段的数据是上一天的字段AA+BB的数据
 
  怎么用SQL语法修改这个表
  我想要update怎么写这个语句

得到结果的表数据是
字段   aa     bb             rq
          43       07月1日
          34       437月2日
          45       777月3日
          34       1227月4日
          65       1567月5日
          65       221   7月6日
          65       2867月7日
        ...           ...       ....
        ...           ...       ....

[解决办法]
--测试

declare @a table (
aa int,
bb int,
rq datetime
)
insert @a select
43, 0, '2007-7-1 '
union all select
34, 0, '2007-7-2 '
union all select
45, 0, '2007-7-3 '
union all select
34, 0, '2007-7-4 '
union all select
65, 0, '2007-7-5 '
union all select
65, 0, '2007-7-6 '
union all select
65, 0, '2007-7-7 '
union all select
40, 0, '2007-7-8 '


update a1
set bb=(select sum(aa) from @a where rq <a1.rq)
from @a a1
where rq> '2007-7-1 '

select * from @a

--结果
aa bb rq
----------- ----------- ------------------------------------------------------
43 0 2007-07-01 00:00:00.000
34 43 2007-07-02 00:00:00.000
45 77 2007-07-03 00:00:00.000
34 122 2007-07-04 00:00:00.000
65 156 2007-07-05 00:00:00.000
65 221 2007-07-06 00:00:00.000
65 286 2007-07-07 00:00:00.000
40 351 2007-07-08 00:00:00.000

(所影响的行数为 8 行)


[解决办法]
其实可以带第一条记录一起更新

declare @a table (
aa int,
bb int,
rq datetime
)
insert @a select
43, 0, '2007-7-1 '
union all select
34, 0, '2007-7-2 '
union all select
45, 0, '2007-7-3 '
union all select
34, 0, '2007-7-4 '


union all select
65, 0, '2007-7-5 '
union all select
65, 0, '2007-7-6 '
union all select
65, 0, '2007-7-7 '
union all select
40, 0, '2007-7-8 '


update a1
set bb=isnull((select sum(aa) from @a where rq <a1.rq),0)
from @a a1

select * from @a

--结果
aa bb rq
----------- ----------- ------------------------------------------------------
43 0 2007-07-01 00:00:00.000
34 43 2007-07-02 00:00:00.000
45 77 2007-07-03 00:00:00.000
34 122 2007-07-04 00:00:00.000
65 156 2007-07-05 00:00:00.000
65 221 2007-07-06 00:00:00.000
65 286 2007-07-07 00:00:00.000
40 351 2007-07-08 00:00:00.000

(所影响的行数为 8 行)

热点排行