求一个sql

lawbc 2010-11-30 10:33:35
记录如下:
ID NUM
1 11
2 11
3 3
4 6
5 7


比如当前ID为4,对应NUM为6,怎么样更新当前id为4的记录的NUM的值,NUM的值计算规则为,取比他本身大的记录中的最小的一个,如果没有的话,那么就为本身,这里就是7了
...全文
82 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
birdmonster 2010-12-02
  • 打赏
  • 举报
回复

UPDATE TB SET NUM=
(
SELECT TOP 1 NUM FROM TB A WHERE A.NUM>E.NUM ORDER BY A.NUM
) FROM TB E
WHERE ID=4 AND EXISTS(SELECT TOP 1 NUM FROM TB A WHERE A.NUM>E.NUM ORDER BY A.NUM)
nice_dream_li 2010-12-01
  • 打赏
  • 举报
回复

IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB
(
ID INT,
NUM INT
)
INSERT INTO TB
SELECT 1,11 UNION ALL
SELECT 2,11 UNION ALL
SELECT 3,3 UNION ALL
SELECT 4,6 UNION ALL
SELECT 5,7

ID NUM
1 3
2 3
3 6
4 7
5 7
update tb
set num=(select isnull(min(num),a.num) from tb where id>a.id) from tb a
select * from tb

fpzgm 2010-12-01
  • 打赏
  • 举报
回复
#3还是不对,还是我来吧
IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB
(
ID INT,
NUM INT
)
INSERT INTO TB
SELECT 1,11 UNION ALL
SELECT 2,11 UNION ALL
SELECT 3,3 UNION ALL
SELECT 4,6 UNION ALL
SELECT 5,7 UNION ALL
SELECT 6,5

UPDATE TB
SET NUM=CASE WHEN EXISTS(SELECT 1 FROM TB T1 WHERE T1.ID>TB.ID)
THEN (SELECT top 1 NUM FROM TB T1 WHERE T1.ID>TB.ID order by ID)
ELSE TB.NUM END
WHERE ID=4

SELECT * FROM TB

/*
ID NUM
1 11
2 11
3 3
4 7
5 7
6 5
*/
jaydom 2010-12-01
  • 打赏
  • 举报
回复


IF object_id('tb') IS NOT NULL
DROP TABLE tb
go
CREATE TABLE tb (id int,num int)
INSERT INTO tb
SELECT 1, 11 UNION all
SELECT 2, 11 UNION all
SELECT 3, 3 UNION all
SELECT 4, 6 UNION all
SELECT 5, 7

UPDATE tb
SET num=CASE WHEN (SELECT min(num) FROM tb WHERE num>a.num ) IS NOT NULL
THEN (SELECT min(num) FROM (SELECT num FROM tb WHERE num>a.num) b)
ELSE num END
FROM tb a
WHERE id=4

SELECT * FROM tb

1 11
2 11
3 3
4 7
5 7
abuying 2010-12-01
  • 打赏
  • 举报
回复
update tb 
set num=(select min(num) from tb where num>a.num) from tb a
where exists( select 1 from tb b where b.num>a.num)
飘零一叶 2010-11-30
  • 打赏
  • 举报
回复
IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB
(
ID INT,
NUM INT
)
INSERT INTO TB
SELECT 1,11 UNION ALL
SELECT 2,11 UNION ALL
SELECT 3,3 UNION ALL
SELECT 4,6 UNION ALL
SELECT 5,7

UPDATE TB
SET NUM=CASE WHEN EXISTS(SELECT 1 FROM TB T1 WHERE T1.ID>TB.ID) THEN (SELECT MIN(NUM) FROM TB T1 WHERE T1.ID>TB.ID ) ELSE TB.NUM END

SELECT * FROM TB
-------------------------
ID NUM
1 3
2 3
3 6
4 7
5 7
lawbc 2010-11-30
  • 打赏
  • 举报
回复
LS的好像不对吧,你join的是最大值,而我要求的是比当前查询的NUM的值大的记录中的最小的一个
lxq19851204 2010-11-30
  • 打赏
  • 举报
回复
Update T1 A join (Select max(NUM) as NUM From t1)B
set A.sNUM=B.NUM where A.ID=4

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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