SQL如何实现:第一步.查询这个数据表zhamen—0的行数;第二步.将n-1和n行数据更新到第一二行;
答案:2 悬赏:70
解决时间 2021-02-21 20:11
- 提问者网友:虛偽丶靜
- 2021-02-21 00:31
SQL如何实现:第一步.查询这个数据表zhamen—0的行数。(假如结果是n行);第二步.将n-1和n行数据更新到第一二行;第三步,将第三行到第n数据都删除。
最佳答案
- 二级知识专家网友:而你却相形见绌
- 2021-02-21 01:37
Create Table T
(
id int identity(1,1),
A int
)
--这里的id是用来排序的,可以不用
Insert into t(A) values(1),(2),(3),(5),(6),(7),(8)
;
With CT
AS
(
--生成记录号1到N
Select ROW_NUMBER() Over(Order By id) As id,A
From T
)
Merge Into CT As A
Using
(
--生成另一个记录号,用1到N-(记录总数-2)
--这是为了N和第二行,N-1和第一行数据对应
Select ROW_NUMBER() Over(Order By id)-(Count(*) Over()-2) As id,A
From T
) As B
On A.id=B.id--按上面的记录号对应
When matched Then--对应上的就更新
Update Set A.A=B.A
When not matched By source Then--对应不上的就删除
Delete;
--测试环境MSSQL2008,这是增修删合拼成一句sql的写法
(
id int identity(1,1),
A int
)
--这里的id是用来排序的,可以不用
Insert into t(A) values(1),(2),(3),(5),(6),(7),(8)
;
With CT
AS
(
--生成记录号1到N
Select ROW_NUMBER() Over(Order By id) As id,A
From T
)
Merge Into CT As A
Using
(
--生成另一个记录号,用1到N-(记录总数-2)
--这是为了N和第二行,N-1和第一行数据对应
Select ROW_NUMBER() Over(Order By id)-(Count(*) Over()-2) As id,A
From T
) As B
On A.id=B.id--按上面的记录号对应
When matched Then--对应上的就更新
Update Set A.A=B.A
When not matched By source Then--对应不上的就删除
Delete;
--测试环境MSSQL2008,这是增修删合拼成一句sql的写法
全部回答
- 1楼网友:滚出爷的世界
- 2021-02-21 02:23
你好!
表结构发出来,按什么排序?
如有疑问,请追问。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |