我有一些按列 ID 连续排序的数据。数据中有一列“Ueid”,其中包含员工编号。如果一名员工拥有多条记录,则同一 Ueid 可能会出现在多行中。要获取按时间顺序序列化的员工数据,我使用以下命令,效果很好
SELECT ROW_NUMBER() OVER(PARTITION BY Ueid ORDER BY ID ASC) AS RowNumber, *
FROM [dbo].[checking]
order by ID
我想将“RowNumber”列添加到我的原始数据中。 什么是有效的方法?
我正在考虑使用以下命令,但出现错误。
1 错误表示“无法绑定(bind)多部分标识符“newone.[ID]”和“newone.[Row]””
2 错误提示“列名 RowNumber 无效”
with newone as (SELECT ROW_NUMBER() OVER(PARTITION BY Ueid ORDER BY ID ASC) AS RowNumber, *
FROM [dbo].[checking])
update [dbo].[checking]
set Rownumber = newone.[RowNumber]
where [dbo].[checking].ID = newone.[ID]
最佳答案
你快到了。 UPDATE
语句中的语法错误。
ALTER TABLE dbo.checking ADD RowNumber INT NULL; --or not NULL, depending on requirements.
WITH newone(ID, UEID, RowNumber) AS (SELECT ID, UEID,
ROW_NUMBER() OVER(PARTITION BY UEID ORDER BY ID ASC) AS RowNumber
FROM [dbo].[checking])
UPDATE [dbo].[checking]
SET RowNumber = n.[RowNumber]
FROM dbo.checking c INNER JOIN newone n ON c.ID = n.ID;
这是一个SQL Fiddle .
关于sql - 使用sql server management studio向sql表添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20846271/