0

Ich habe eine Spalte mit dem Standardwert 0 für meine Tabelle erstellt. Ich möchte diese Tabelle mit der richtigen Sequenznummer aktualisieren. Könnte ich das mit Row_Number machen?Update-Spalte basierend auf Zeilennummer

meinem Tisch ist:

PersonID | Code | Sequence Number 
---------+--------+------------ 
10  | D112 | 0 
10  | D112 | 0 
10  | D112 | 0 
10  | E110 | 0 
10  | E110 | 0 
10  | E110 | 0 
10  | D112 | 0 
10  | D112 | 0 
10  | D112 | 0 
10  | E110 | 0 
10  | E110 | 0 
10  | E110 | 0 

ich meine Tabelle wie folgt sein soll:

PersonID | Code | Sequence Number 
---------+--------+------------ 
10  | D112 | 1 
10  | D112 | 1 
10  | D112 | 1 
10  | E110 | 2 
10  | E110 | 2 
10  | E110 | 2 
11  | M490 | 1 
11  | M490 | 1 
11  | M490 | 1 
11  | N550 | 2 
11  | N550 | 2 
11  | N550 | 2 

Dies ist der Code, den ich habe, aber nicht sicher, ob dies richtig ist.

WITH CTE AS (
SELECT 
    t.Sequence Number, 
    ROW_NUMBER() OVER (PARTITION BY t.PersonID, t.Code ORDER BY t.PersonID) AS RN 
FROM Table AS t) 

UPDATE CTE 
SET Sequence Number = RN 
+0

Sieht die Select-Anweisung korrekt ist –

Antwort

3
DECLARE @Table AS TABLE (PersonId INt, Code CHAR(4), SequenceNumber INT) 

INSERT INTO @Table VALUES (10,'D112',0),(10,'D112',0),(10,'D112',0),(10,'E110',0) 
,(10,'E110',0),(10,'E110',0),(10,'D112',0),(10,'D112',0),(10,'D112',0),(10,'E110',0) 
,(10,'E110',0),(10,'E110',0) 


;WITH CTE AS (
SELECT 
    PersonId 
    ,Code 
    ,SequenceNumber 
    ,DENSE_RANK() OVER (PARTITION BY t.PersonID ORDER BY t.Code) AS RN 
FROM 
    @Table AS t) 


UPDATE cte 
    SET SequenceNumber = RN 

SELECT * 
FROm 
    @Table 

Sie sind ganz in der Nähe müssen nur Ihr PARTITION BY und ORDER BY etwas anderes zu tun und DENSE_RANK() dann statt ROW_NUMBER() verwenden, um die Beziehungen zu behandeln.