sql - 使用sql server management studio向sql表添加列

标签 sql sql-server-2008

我有一些按列 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/

相关文章:

sql - 杀死mysqld进程

sql - 通过 select * from exec(MySP) 创建 View

sql-server - sql server 2008 R2 远程过程调用失败

sql-server-2008 - ssas 维度处理键未找到错误

mysql - 如何用sql实现下面的场景

mysql - AS 不使用 COUNT(*) 和 UNION

php - 在像这样的照片评级系统中获得名人堂/耻辱堂的最有效方法

sql - 如何连接2个同表查询结果并在SQLite中保持唯一键?

sql-server - 像 USE 这样的函数指向不同服务器上的 SQL 数据库?

sql-server - 无法在 Windows Server 2008 R2 Core 上安装 SQL Server 2016