sql问题,如果根据排列顺序update数据。

easyboot 2010-04-14 11:39:30
我想实现一个功能,根据排序来实现更新行号。

字段1 字段2 字段3 字段4
a b c 1
d e f 2
g h i 3
j k l 4

就是根据查询条件来确定字段4 的行号。查询完毕后需要更新字段4的行号。
如果查询结果为一条则字段4为1
如果查询结果为两条则字段4存1和2

希望大家给我个例子。谢谢!
...全文
541 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
easyboot 2010-04-14
  • 打赏
  • 举报
回复
不好意思我用的是sql 2000 我的想法是根据查询结果来更新字段4
东那个升 2010-04-14
  • 打赏
  • 举报
回复



with t as(
select *,rn=row_number() over(partition by 分组列 order by 排序列)from tb
)
update t
set 字段4=rn
htl258_Tony 2010-04-14
  • 打赏
  • 举报
回复
IF OBJECT_ID('[MyTest]') IS NOT NULL
DROP TABLE [MyTest]
GO
CREATE TABLE [dbo].[MyTest](
[ID] [int] NOT NULL,
[ParentID] [int] NULL,
[Name] [nvarchar](50) NULL
) ON [PRIMARY]
INSERT INTO MyTest ([ID], [ParentID], [Name]) VALUES (1, 0, 'A')
INSERT INTO MyTest ([ID], [ParentID], [Name]) VALUES (2, 1, 'B')
INSERT INTO MyTest ([ID], [ParentID], [Name]) VALUES (3, 1, 'C')
INSERT INTO MyTest ([ID], [ParentID], [Name]) VALUES (4, 1, 'D')
INSERT INTO MyTest ([ID], [ParentID], [Name]) VALUES (5, 2, 'E')
INSERT INTO MyTest ([ID], [ParentID], [Name]) VALUES (6, 3, 'F')
INSERT INTO MyTest ([ID], [ParentID], [Name]) VALUES (7, 5, 'G')

select *,字段4=ROW_NUMBER()over(order by getdate()) from [MyTest] where [ParentID]=0
/*
ID ParentID Name 字段4
----------- ----------- -------------------------------------------------- --------------------
1 0 A 1

(1 行受影响)
*/
select *,字段4=ROW_NUMBER()over(order by getdate()) from [MyTest] where [ParentID]=1
/*
ID ParentID Name 字段4
----------- ----------- -------------------------------------------------- --------------------
2 1 B 1
3 1 C 2
4 1 D 3

(3 行受影响)

*/
这种效果吧
--小F-- 2010-04-14
  • 打赏
  • 举报
回复
如果是2005的话 直接用row_number()over
水族杰纶 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wufeng4552 的回复:]

SQL code
select 字段1,
字段2,
字段3,
字段4=(select count(*) from tb where 字段4<t.字段4)
from tb t
where...
[/Quote]
--更正
if not object_id('tb') is null
drop table tb
Go
Create table tb([字段1] nvarchar(1),[字段2] nvarchar(1),[字段3] nvarchar(1),[字段4] int)
Insert tb
select N'a',N'b',N'c',1 union all
select N'd',N'e',N'f',2 union all
select N'g',N'h',N'i',3 union all
select N'j',N'k',N'l',4
Go
select 字段1,
字段2,
字段3,
字段4=(select count(*) from tb where [字段1] in('a','j') and 字段4<=t.字段4)
from tb t
where [字段1] in('a','j')
/*
字段1 字段2 字段3 字段4
---- ---- ---- -----------
a b c 1
j k l 2

(2 個資料列受到影響)

*/
htl258_Tony 2010-04-14
  • 打赏
  • 举报
回复
楼主要的应该不是更新数据,是刷新数据吧。SQL2005用row_number()函数就能轻易搞定,不需要更新到表。
水族杰纶 2010-04-14
  • 打赏
  • 举报
回复
select 字段1,
字段2,
字段3,
字段4=(select count(*) from tb where 字段4<t.字段4)
from tb t
where...
sgtzzc 2010-04-14
  • 打赏
  • 举报
回复
没看懂

27,579

社区成员

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

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