Update mit subquery

Hallo zusammen,

ich hab leider ein kleines Problem und möchte die tabelle Rank den Platz Updaten. Leider komme ich mit den Code nicht weiter.

with ABSQuery1 do
begin
Close;
SQL.Clear;
SQL.Add(‚UPDATE Rank SET Platz =‘);
SQL.Add(’(select R1.Name, R1.Punkte, count(R2.Punkte) as Platz ');
SQL.Add(‚from Rank R1, Rank R2‘);
SQL.Add('where ((R1.Punkte

Moin,

SQL.Add(‚UPDATE Rank SET Platz =‘);
SQL.Add(’(select R1.Name, R1.Punkte, count(R2.Punkte) as Platz ');

wo sollen Name und Punkte denn landen? Die Select-Klausel darf nur einen Wert zurückliefern.

Gruß Ralf

Hallo drambeldier

SQL.Add(‚UPDATE Rank SET Platz =‘);
SQL.Add(’(select count(R2.Punkte) as Platz ');

Ich habe mal den Name und Punkte raus genommem, dann updatet er nur den letzten Count. Aber ich möchte es so haben das der Platz zum Beispiel
Punkte | Platz
1234__|1
_223__|2
ist.

SQL.Add('select R1.Name, R1.Punkte, count(R2.Punkte) as Platz ');
SQL.Add(‚from Rank R1, Rank R2‘);
SQL.Add('where ((R1.Punkte

Hallo,

das problem ist das du 3 Felder versuchst in 1 Feld zu schreiben.
Du musst die drei Felder zu einem Wert zusammenfassen. Es hängt von der von dir verwendeten Datenbank ab wie zu es zu einem String konkatenierst. Zum Beispiel bei PL/SQL ist es „||“ bei T/SQL gehts mit „+“

SQL.Add(’(select R1.Name || R1.Punkte || count(R2.Punkte) as Platz ');

SQL.Add(’(select R1.Name + R1.Punkte + count(R2.Punkte) as Platz ');

MfG Dominik

Hallo krampe

Ich formeliere mal die Frage anders.
Aus den Code ermittle ich die Plätze von 1 bis 100 z.B.

SQL.Add('select R1.Name, R1.Punkte, count(R2.Punkte) as Platz ');
SQL.Add(‚from Rank R1, Rank R2‘);
SQL.Add('where ((R1.Punkte

Hallo,

probiere mal

UPDATE Rank SET Platz = (
 SELECT COUNT(R2.Punkte) 
 FROM Rank R1, Rank R2
 WHERE ((R1.Punkte 

Das Problem ist wie ich bereits sagte das du nicht mehrere Felder in eins schreiben kannst.
Du kannst nur den Inhalt aus diesen Felder zu einem Wert zusammenfassen und ihn dann schreiben, sofern du das willst.

Hallo krampe

UPDATE Rank SET Platz = (
SELECT COUNT(R2.Punkte) 
FROM Rank R1, Rank R2
WHERE ((R1.Punkte 
Geht nicht weil nur die anzahl der zeilen gespeichert werden.
Also ich möchte aus den Punkten ein ranking haben. Vieleicht geht es auch anders.(Absolute Database hat leider kein Rank() over

MfG
Aal Angler

WAS genau soll denn jetzt im Feld „Platz“ landen?

Ich vermute mal so ins blaue:

Du hast eine Tabelle in der Art:

Name ! Punkte ! Platz
------+----------+--------
aaa ! 20 !
bbb ! 40 !
ccc ! 10 !

und du möchstest jetzt, das in der Spalte „Platz“ entsprechend das Ranking eingetragen wird (also bei aaa eine 2, bei bbb eine 1 und bei ccc eine 3)

Dann veruch mal folgendes:

UPDATE Rank R1
SET Platz = (SELECT COUNT(\*)
 FROM Rank R2
 WHERE R2.Punkte 

Einziges Manko:
Bei 2 Zeilen mit der gleichen Punktzahl bekommen beide das gleiche (schlechtere) Ranking.

Gruß,
Darkwing ^v^