[求助]求一个一条sql语句操作两条记录的办法,谢谢(100分)

  • 主题发起人 主题发起人 himoo
  • 开始时间 开始时间
H

himoo

Unregistered / Unconfirmed
GUEST, unregistred user!
我有个表例如
ID A(时间) B(值) C
1 200505 1
2 200506 2
3 200507 3
......
4 200605 4
5 200606 5
以后一段时间后会追加数据,如:
6 200607 6
字段C是空的,现在我要在每次追加数据后生成C,
本条记录的C等于 本条记录B值 减去 上个月那条记录的B值
(ID号不一定是连续的,时间要考虑到年份问题)

这条sql怎么写呢?谢谢
sql 2000数据库
 
insert List(a,b,c) values(@a,@b,select @c=c from List where DATEADD(Month,-1,@a))
 
谢谢您的回答。
另外,还有些实际问题:
1.B字段的数据是从每年1月份开始的,而不算上上一年的数据。这样的话怎么去生成每年1月份的C?
2.如果 某一个月的数据没有怎么办?
比如,所有年份的1月份没有数据
 
没有默认为0?
select @c=isnull(c,0) from List where a=DATEADD(Month,-1,@a) and Year(a)=Year(@a)
insert List(a,b,c) values(@a,@b,@c)
 
[red]关注。。。。。。[/red]
 
友情路过,帮up [:D][:D]
 
又有问题了……
DECLARE @aks_TM decimal
DECLARE @P_date nvarchar
DECLARE @Aks_1 decimal
set @P_date= '200602'
SELECT @aks_TM = isnull(aks_TM, 0)
FROM TB_MONTH
WHERE P_date = DATEADD(Month, - 1, P_date) AND Year(P_date) = Year(@P_date)

update TB_Month set aks_TM=@aks_TM
提示
服务器: 消息 241,级别 16,状态 1,行 5
从字符串转换为 datetime 时发生语法错误。

我aks系列都是 decimal
P_date 是 nvarchar
 
学习一下
 
where 子句中少了个@,应该为:
SELECT @aks_TM = isnull(aks_TM, 0)
FROM TB_MONTH
WHERE P_date = DATEADD(Month, - 1, @P_date) AND Year(P_date) = Year(@P_date)

另外,dateadd函数返回的是datetime类型,year()的参数应该为datetime类型,而你的P_Date为nvarchar,当然转换失败
 
转换一下就行了:
SELECT @aks_TM = isnull(aks_TM, 0)
FROM TB_MONTH
WHERE P_date = cast(DATEADD(Month, - 1, cast(@P_date as datetime)) as varchar(8)) AND Year(cast(P_date as datetime)) = Year(cast (@P_date as datetime))
 
错了,应该这样
SELECT @aks_TM = isnull(aks_TM, 0)
FROM TB_MONTH
WHERE cast(P_date as datetime) = DATEADD(Month, - 1, cast(@P_date as datetime) AND Year(cast(P_date as datetime)) = Year(cast (@P_date as datetime))
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部