我在一个名为 Projects 的 sql server 表中有一个名为 PID 的整数字段(本质上是一个计数器),我只想在另一个字段的值更改(任务)时才增加该字段。最初,所有行的 PID=1。以下查询(我从您在其他地方的一个答案中得到)完全符合我的要求,但我需要用结果更新我的表,我无法弄清楚。
SELECT Task,
dense_rank() over(order by Task) PID
FROM dbo.Projects;
如果我做类似的事情
Update Projects
SET Projects.PID =(SELECT Task,
dense_rank() over(order by Task) PID
FROM dbo.Projects);
我得到“INSERT 语句的选择列表包含的项目多于插入列表。SELECT 值的数量必须与 INSERT 列的数量相匹配。” 如何使用可以提供我想要的查询的查询来更新我的表?
这是桌子设计:
CREATE TABLE [dbo].[Projects]
(
[PID] [int] NULL
, [TID] [int] IDENTITY(1,1) NOT NULL
, [Project] [nvarchar](127) NOT NULL
, [Task] [nvarchar](127) NOT NULL
, [Dollars] [decimal](18, 0) NOT NULL
, [TaskLead] [nvarchar](127) NULL
) ON [PRIMARY];
我用
INSERT INTO dbo.Projects(Project, Task, Dollars, TaskLead)
SELECT Project + ' ' + ProjectDescription, Task + ' ' + TaskDescription, Dollars, TaskLead
FROM TM1_1
ORDER BY Project ASC, Task ASC;
例如数据:
PID TID Project Task
1 1 Prj1 Tsk11
1 2 Prj1 Tsk12
2 1 Prj2 Tsk21
我想更新表,使所有相同的项目都具有相同的 PID。我现在正在尝试:
use mbt_tm1;
;WITH cteRank AS (
SELECT PID, DENSE_RANK() OVER ( PARTITION BY Project ORDER BY Project ASC) AS Calculated_Rank
FROM Projects )
UPDATE cteRank
SET PID = Calculated_Rank