我有一個稱爲PID的SQL服務器表中稱爲PID的整數字段(本質上是一個計數器),我只想在另一個字段的值更改(任務)時增量。對於所有行,最初PID = 1。以下查詢(我從其中一個答案中得到的)完全符合我的要求,但我需要用結果更新我的表格,而且我無法弄清楚。只有當另一個字段更改值時,如何增加SQL Server數據庫表中的整數字段?
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
你需要更清楚你實際需要什麼。與其他任務相比,你希望'PID'列是它的'Task'的'dense_rank()'嗎?請注意,該數字將根據「任務」列的排序順序進行上/下。 –
我只知道使用dense_rank的查詢工作。我要的是更新我的臺,使得我得到的,例如, – user2093192
例如, PID TID項目任務 11 Prj1 Tsk11 1 2 Prj1 Tsk12 2 1 Prj2 Tsk21 等。我從另一個來源獲得Prj's和Tsk's。我需要根據這種模式添加PID和TID。我不附於dense_rank。我只知道當我在查詢中使用它時,它做了我想要的。 – user2093192