2017-11-18 1 views
1

Ich möchte einen temporären Spaltenaufruf hinzufügen RowNum (ich habe es geschafft, es zu bekommen). Aber mein Problem ist, dass ich meine Daten bestellt werden soll> oder < mit Null-Werten am Ende in meiner Spalte "Moyenne". Ich kann es nicht in der letzten ORDER BY schreiben, weil ich meine Tabellenreihenfolge von RowNum will.ORDER BY mit Null-Werten anders sortiert

 SELECT 
     (SELECT COUNT(*) FROM orieps AS t2 
    WHERE (t2.Nbparcours > t1.Nbparcours) 
    OR (t2.Nbparcours = t1.Nbparcours AND t2.Nberreurs < t1.Nberreurs ) 
    OR (t2.Nbparcours = t1.Nbparcours AND t2.Nberreurs = t1.Nberreurs AND t2.Moyenne < t1.Moyenne )) +1 
AS rowNum, Nom, Nbparcours, Nberreurs, Moyenne, Total , P1, P2, P3, P4, P5 
FROM orieps t1 
    ORDER BY RowNum ASC 

Hier ist meine Tabelle orieps:

Nbparcours|Nberreurs|Moyenne 
     1 | 1 | 0 
     1 | 1 | 3.5 
     2 | 1 | 3 

Und das ist, was ich will:

ROwNum|Nbparcours|Nberreurs|Moyenne 
    1 | 2  | 1 | 3 
    2 | 1  | 1 | 3.5 
    3 | 1  | 1 | 0 

erster Ordnung durch Nbparcours, wenn gleich dann, um durch Nberreurs wenn gleich dann, um durch Moyenne aber 0 zuletzt.

Antwort

0

Sie möchten, dass sich der Wert 0 so verhält, als wäre es eine große Zahl.

ersetzen So

... AND t2.Moyenne < t1.Moyenne 

mit CASE expression s 0 auf einen anderen Wert zuzuordnen: (. In SQLite, Zahlen zu vergleichen, die kleiner als eine beliebige Zeichenfolge)

... AND CASE t2.Moyenne WHEN 0 THEN 'last' ELSE t2.Moyenne END 
     < CASE t1.Moyenne WHEN 0 THEN 'last' ELSE t1.Moyenne END 

+0

Sie sind ein Genie !! Vielen Dank!! Ich wusste nichts über CASE (ich bin ein Anfänger in Sqlite) Es funktioniert sehr gut! Danke noch einmal –