Sql server 如何设置偶数行和奇数行的值?
我有下表Sql server 如何设置偶数行和奇数行的值?,sql-server,Sql Server,我有下表 db_name server_name approver cube1 server1 cube1 server2 cube2 server3 cube2 server4 我想更新每一偶数行上的approver列,假设索引从0开始,奇数行开始,如下所示: 偶数第1行:approver1 第二排单数:2 我的最终目标是让桌子看起来像这样 db_name server_name approver cube1 server1 approver1 cube1 s
db_name server_name approver
cube1 server1
cube1 server2
cube2 server3
cube2 server4
我想更新每一偶数行上的approver列,假设索引从0开始,奇数行开始,如下所示:
偶数第1行:approver1
第二排单数:2
我的最终目标是让桌子看起来像这样
db_name server_name approver
cube1 server1 approver1
cube1 server2 approver2
cube2 server3 approver1
cube2 server4 approver2
我没有主键/ID列,也不打算包含主键/ID列
从这句话开始,我怎样才能实现我想要的
UPDATE Table1
SET approvers = 'approver1'
GO
可以使用and,但此处需要id列 像这样的东西还没有测试过。你甚至需要同样的东西 -从奇数中获取所有ID 使用TableData作为 选择ID,按ID ASC排序的行号作为行号 来自表1 其中,行数%2=1-奇数 -使用approver1更新奇数 更新表集审批人='approver1' 来自表1 Table1.ID上的内部联接TableData=TableData.ID
只是另一个选择 范例 更新后的表
哪个列或列组合定义了顺序?db_名称、服务器_名称是键吗?因此是唯一的?如果不是,则是哪列或列组合?@stickybit没有列定义顺序。当我选择的时候,我可以像我在帖子中的表格一样返回所有的行,所以我只是依靠自然排序。此外,db_name、server_name都不是键。我的表中没有任何主键没有顺序,没有键,没有可靠的机会做你想做的事情。我认为默认情况下,这是硬盘上的物理顺序,可以在更新/删除/恢复DB/DB文件分区后重新定位。你能详细说明你的意思吗?假设DB_name上的分区/重置OHH我明白你的意思。这实际上是一个很好的思考方式,不是偶数/奇数,而是每一个新的db_名称…唯一的问题是如何将第二个db_名称设置为approver2?问题:关于代码的开头;这真的是以分号开始的吗?我不确定它是否是某个东西的延续,或者语法实际上是这样的,这是我第一次遇到这样的东西。这一个,NewValue,以commaquestion开头;NewValue在我的情况下是否为approver1?approver1=concat我的问题是,sql语句中的哪一个是approver1和approver2?我不知道它们是如何插入的,我查看了fiddle,看到您创建了一个表,approver列值设置为null,但我不知道您最终如何插入approver1和approver2,但您需要一个id列,所以在我的情况下,我不能使用此方法,对吗?如果框确实存在,则不显示
;with cte as (
Select *
,RN= Row_Number() over (Order By db_name,server_name) % 2
From YourTable
)
Update cte
Set approver = case when RN=1 then 'ApproverX' else 'ApproverY' end
db_name server_name approver
cube1 server1 ApproverX
cube1 server2 ApproverY
cube2 server3 ApproverX
cube2 server4 ApproverY