一個SQL查詢与更新問題,立即解決,立即給分

caryChen2012 2012-01-30 09:54:04
表A:

KID OPRNUM OPRNUMNEXT
K0001 100 200
K0001 200 201
K0001 201 300
K0001 300 400
K0001 400 0
K0003 400 0
K0003 200 201
K0003 100 200
K0003 300 400
K0003 201 300
K0002 100 200
K0002 200 300
K0002 210 400
K0002 300 210
K0002 400 0

这里面的OPRNUMNEXT是要拿OPRNUM下一条记录的号码才是正确的
(按照OPNUM号码从小到大排,比如说K0003的OPNUM为200的下一个OPNUM号是201)。
K0001,K0003是正确的,K0002明显示错误的,就是把这一种错误的数据
找出来并且更新它们,更新效果如下:

KID OPRNUM OPRNUMNEXT
K0002 100 200
K0002 200 210
K0002 210 300
K0002 300 400
K0002 400 0

这一种SQL语句怎么样写?,请高手指点
...全文
59 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子 2012-01-30
  • 打赏
  • 举报
回复

--适用于2005-2008+
--> 测试数据: @表A
declare @表A table (KID varchar(5),OPRNUM int,OPRNUMNEXT int)
insert into @表A
select 'K0001',100,200 union all
select 'K0001',200,201 union all
select 'K0001',201,300 union all
select 'K0001',300,400 union all
select 'K0001',400,0 union all
select 'K0003',400,0 union all
select 'K0003',200,201 union all
select 'K0003',100,200 union all
select 'K0003',300,400 union all
select 'K0003',201,300 union all
select 'K0002',100,200 union all
select 'K0002',200,300 union all
select 'K0002',210,400 union all
select 'K0002',300,210 union all
select 'K0002',400,0

;with maco as
(
select row_number() over (partition by KID order by OPRNUM) as rid, * from @表A
)

update @表A set OPRNUMNEXT=c.OPRNUMNEXT
from @表A a left join (Select a.rid,a.KID,a.OPRNUM,isnull(b.OPRNUM,0) as OPRNUMNEXT from maco a
left join maco b on a.KID=b.KID and a.rid=b.rid-1)c
on a.KID=c.KID and a.OPRNUM=c.OPRNUM

select * from @表A order by KID,OPRNUM
/*
KID OPRNUM OPRNUMNEXT
----- ----------- -----------
K0001 100 200
K0001 200 201
K0001 201 300
K0001 300 400
K0001 400 0
K0002 100 200
K0002 200 210
K0002 210 300
K0002 300 400
K0002 400 0
K0003 100 200
K0003 200 201
K0003 201 300
K0003 300 400
K0003 400 0
*/
叶子 2012-01-30
  • 打赏
  • 举报
回复
SQL SERVER 2000 还是 2005?2008?
解决 win8系统安装sql2005时报了服务无法启动问题,具体操作是通过网上搜索过来的 1、正常安装任一版本的SQL Server 2005(最好安装企业版)。 2、安装到SqlServer服务的时候提示启动服务失败(提示重试的时候),这里就是关键啦,下载本文的两个附件,里面是SP4(2005.90.5000.0)版本的sqlservr.exe和sqlos.dll。 sqlservr64.rar sqlservr32.rar 3、进入SQL Server 2005的安装路径,进入MSSQL文件夹下面的Binn文件夹,在该文件夹里面搜索“sqlservr.exe”文件,并把它复制一份到桌面或其它地方作为备份,然后把上面第2步下载的文件解压出sqlservr.exe和sqlos.dll两个文件,复制到Binn文件夹里面覆盖原文件(即点击替换)。 例如“D:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Binn”。 4、点击“重试”,安装继续,安装程序安装成功。 5、安装完成之后,去任务管理器找到sqlservr.exe进程,把它结束掉,把备份的sqlservr.exe文件还原回去,也就是替换回去(否则SP4安装程序以为你已经应用过SP4),然后立即打上SP4补丁(即安装已经下载好的SP4更新程序)。(在此之前不要运行SQL任何软件) 6、安装完SP4补丁,SQL Server运行正常。(补丁可以网上下载,是一个exe格式的可执行文件,实际上就是一个更新软件包,也可叫补丁,只是叫法不一样)。 通过以上六个步骤基本可以解决问题。没有解决的可能是当前登录不是超级管理员导致的。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧