Rang ermitteln

nudie

Neuer Benutzer
Beiträge
2
Hallo,

ich habe folgendes Problem udn hoffe dass ich hier Hilfe finde.

Ich möchte für aufeinander folgende ID´s in einer Tabelle, einen gemeinsamen Rang verpassen. Diesen Rang möchte ich später als Primary Key einsetzen, um Daten zu verküpfen. Der Zähler soll +1 sein. Hier ein einfaches Beispiel:

id rank
747 1
748 1
895 2
896 2
897 2
900 3
901 3
902 3

Da ID 747 und 748 auf einander folgen mit dem Zähler "+1" , sollen diese zu einem Rang ausgegeben werden.

Wie würde das Statement hierfür aussehen? Angenommen, Tabellennaame ist "test".
 
Werbung:
Das ist in jedem Fall nicht ganz einfach aber es gibt Wege:
Code:
WITH t(id,zeile,[rank]) AS (
   SELECT   min(id),
       1,
       1
   FROM   test
   UNION ALL
   SELECT   u.id,
       cast(u.zeile AS INT),
       ( CASE WHEN t.id + 1 = u.id THEN t.[rank] ELSE t.[rank] + 1 END )
   FROM   t
   INNER JOIN (   SELECT   ROW_NUMBER() OVER (ORDER BY id) AS zeile,
               id
           FROM   test ) u
   ON     t.zeile + 1 = u.zeile
   )
SELECT   t.id,
     t.[rank]
FROM   t
OPTION (MAXRECURSION 10000)
Du kannst aber in keinem Fall das Ergebnis [rank] als PK verwenden denn der Rang ist ja nicht eindeutig. Brauchst du vielleicht eher eine Zwischentabelle für eine n:m Beziehung?
 
Werbung:
Danke vorab für deine Zusammenstellung des Skriptes. Vielleicht habe ich mich nicht klar ausgedrückt, aber ich kann es als Key verwenden, da für mich ein Key aus mehreren Blöcken besteht.

Key=eine Belegnummer
Mehrere Datensätze mit dem selben Key, gehören zusammen, da selber Beleg.
 
Zurück
Oben