[sql server] update中变量的赋值用法 实现分组更新序号

--建立测试环境
IF OBJECT_ID('tb') IS NOT NULL  DROP TABLE tb
GO
CREATE TABLE tb
(
 FDate datetime ,
 FPeriod int,
 FNum int, 
 FEntryID int
)
GO
INSERT TB ( FDate, FPeriod, FNum )
SELECT '2009-1-1', 1, 1 union all
SELECT '2009-1-1', 1, 1 union all
SELECT '2009-1-1', 1, 1 union all
SELECT '2009-1-1', 1, 1 union all
SELECT '2009-1-3', 1, 2 union all
SELECT '2009-1-3', 1, 2 union all
SELECT '2009-1-3', 1, 2 union all
SELECT '2009-1-4', 1, 4 union all
SELECT '2009-1-4', 1, 4
--查询
--如果update可以
declare @i int,@fnum int
set @i=0
update tb
set FEntryID=@i,
@i=case when @fnum = fnum then @i+1 else 0 end,
@fnum=fnum
go
--
select * from tb
/*
FDate                   FPeriod     FNum        FEntryID
----------------------- ----------- ----------- -----------
2009-01-01 00:00:00.000 1           1           0
2009-01-01 00:00:00.000 1           1           1
2009-01-01 00:00:00.000 1           1           2
2009-01-01 00:00:00.000 1           1           3
2009-01-03 00:00:00.000 1           2           0
2009-01-03 00:00:00.000 1           2           1
2009-01-03 00:00:00.000 1           2           2
2009-01-04 00:00:00.000 1           4           0
2009-01-04 00:00:00.000 1           4           1

(9 行受影响)

*/

--如果要查询
--由于sql2000 没有row_number函数,所以要用个临时表
IF OBJECT_ID('tempdb..#t') IS NOT NULL  DROP TABLE #t
GO
CREATE TABLE #t
(
 FDate datetime ,
 FPeriod int,
 FNum int, 
 FEntryID int identity
)
go
insert #t
select FDate, FPeriod, FNum from tb order by FNum
go
----
select FDate, FPeriod, FNum ,
(select count(1) from #t where fnum=a.fnum and FEntryID<a.FEntryID)FEntryID
from #t a

--结果
/*
FDate                   FPeriod     FNum        FEntryID
----------------------- ----------- ----------- -----------
2009-01-01 00:00:00.000 1           1           0
2009-01-01 00:00:00.000 1           1           1
2009-01-01 00:00:00.000 1           1           2
2009-01-01 00:00:00.000 1           1           3
2009-01-03 00:00:00.000 1           2           0
2009-01-03 00:00:00.000 1           2           1
2009-01-03 00:00:00.000 1           2           2
2009-01-04 00:00:00.000 1           4           0
2009-01-04 00:00:00.000 1           4           1

(9 行受影响)


*/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值