SQL Abfrage mit (laufenden) Zahlen

Hallo

Ich suche eine SQL Abfrage mit automatisch laufenden Zahlen.
Am besten ich geben ein Spiele für eine Tabelle, und was die Abfrage liefern soll:

Tabelle:
PersonID | GerätID
p2 | g2
p2 | g7
p3 | g9
p4 | g8
p4 | g1
p3 | g5
p7 | g3
p3 | g6


Abfrage Tabelle
PersonID | GerätID | Anzahl_Von
p2 | g2 | 1 von 2
p2 | g7 | 2 von 2
p3 | g9 | 1 von 3
p4 | g8 | 1 von 2
p4 | g1 | 2 von 2
p3 | g5 | 2 von 3
p7 | g3 | 1 von 1
p3 | g6 | 3 von 3


Die neue Spalte " Anzahl von " soll immer angeben, um das wievielte Gerät es sich handelt, das eine Person zugeordnet ist; und wieviele Gerät eine Person zugeordnet sind.

Die Summe, wieviele Geräte einer Person zugeordnet sind, mach tmir keine Probleme. Aber die fortlaufende Nummer: keine Ahnung wie das geht.


Wer kann da helfen?


Danke

Die Entwickler von PG und deren neue Version 8.4:

test=# select * from squicky ;
 person_id | geraet_id
-----------+-----------
 p2        | g2
 p2        | g7
 p3        | g9
 p4        | g8
 p4        | g1
 p4        | g5
 p7        | g3
 p3        | g6
(8 rows)


test=# select person_id, geraet_id, count(1) over (partition by person_id order by person_id, geraet_id), row_number() over (partition by person_id order by person_id, geraet_id), (row_number() over (partition by person_id))::text || ' von ' || (count(1) over (partition by person_id))::text as "Wunsch-Spalte"  from squicky ;
 person_id | geraet_id | count | row_number | Wunsch-Spalte
-----------+-----------+-------+------------+---------------
 p2        | g2        |     1 |          1 | 1 von 2
 p2        | g7        |     2 |          2 | 2 von 2
 p3        | g6        |     1 |          1 | 1 von 2
 p3        | g9        |     2 |          2 | 2 von 2
 p4        | g1        |     1 |          1 | 1 von 3
 p4        | g5        |     2 |          2 | 2 von 3
 p4        | g8        |     3 |          3 | 3 von 3
 p7        | g3        |     1 |          1 | 1 von 1
(8 rows)

Die 2 Spalten count und row_number sollen nur zeigen, wie ich die Wunsch-Spalte berechne.

Andreas

Ich habe die Tabelle nachgebaut um deine Lösung zu testen.
Wenn ich dein Code mit MS SQl 2005 nutze erhalte ich eine Fehlermeldung

select 
    person_id,
    geraet_id,
    count(1) over (partition by person_id order by person_id, geraet_id),
    row_number() over (partition by person_id order by person_id, geraet_id), 
    (row_number() over (partition by person_id))::text || ' von ' || (count(1) over (partition by person_id))::text as "Wunsch-Spalte"  
from squicky

Fehlermeldung:
Meldung 102, Ebene 15, Status 1, Zeile 4
Falsche Syntax in der Nähe von ‘order’.

Du bist hier falsch, hier geht es um PostgreSQL, nicht um M$SQL.

Andreas

So ein Mist. Wäre auch zu schön, wenn man eine so “schwere” Frage so schnell beantworten könnte.

Kennt jemand ein Forum für Microsoft SQL Fragen, wo man mir helfen könnte.

Die Frage war doch beantwortet, und auch recht schnell, oder? :wink:

Du kannst nicht wirklich nachts um halb 1 eine sofortige Antwort erwarten, da schlafe ich.

Wirf also Dein M$SQL in die Tonne und nehme PostgreSQL. Spart Geld und funktionert, und eine tolle Community ist auch dabei.


Andreas

Klar, da wo du es gekauft hast:

Microsoft SQL Server 2005: Support Options

Ggf. musst du aber Geld dafür zahlen, ist halt so bei kommerzieller Software.

Ist ja auch so schwierig. :smiley: Wie wäre es denn hiermit GidF.


mfg

fristo