none
Daten absteigend (DESC) sortieren RRS feed

  • Frage

  • Hallo,

    ich möchte gerne meine Daten absteigend (DESC) sortieren.

    Leider macht das SQL nicht richtig.

    Da mehrere Spalten abgefragt werden.

    Ich möchte die höchsten Werte zuerst angezeigt bekommen.

    Kann mir jemand sagen, wie das geht?

    Danke.

    Gruß Klaus

    Mittwoch, 30. Juli 2014 15:34

Antworten

  • Hallo Klaus,

    dann ist deine Zahl eigentlich gar keine Zahl, sondern ein numerischer Wert in einem String.

    Schau mal in die Tabellendefinition. Die Spalte wird sehr wahrscheinlich als varchar, nvarchar, ... deklariert sein.

    Wenn da nur Zahlen (und ggfs. NULL) enthalten sein sollen, stell den Datentyp entsprechend auf int, ... um (der genaue Datentyp hängt davon ab, ob Kommazahlen erlaubt sind oder nicht und falls ja, mit welcher Genauigkeit, ...)

    Dann klappt es auch mit der Sortierung.

    Kannst Du den Datentyp nicht ändern, es ist aber dennoch sichergestellt, dass nur Ganzzahlen enthalten sind, kannst Du das auch so machen:

    SELECT   ...
    FROM     Tabelle
    ORDER BY CONVERT( int, SpalteX ) DESC

    Das sollte aber nur die Notlösung sein, da das bei vielen Datensätzen entsprechend Performance kostet.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert BlauesBlatt Mittwoch, 30. Juli 2014 22:03
    Mittwoch, 30. Juli 2014 21:13
    Moderator

Alle Antworten

  • Hallo Klaus,

    "die höchsten Werte" gibt es so pauschal nicht. Pro Spalte gibt es größte/kleinste, höchste/niedrigste Werte. Daher wirst Du dir schon überlegen müssen, nach welchen Spalten Du sortieren willst.

    Du kannst problemlos nach mehreren Spalten sortieren.

    SELECT   Spalte1,
             Spalte2,
             Spalte3
    FROM     Tabelle
    ORDER BY Spalte1 DESC,
             Spalte2 DESC,
             Spalte3 DESC
    

    (SQL macht das aber schon richtig, deine Erwartungen sind evtl. aber nicht mit SQL machbar).

    Wenn das nicht das gewünschte Ergebnis bringt, poste bitte mal die Struktur deiner Tabelle, einige Beispielddaten und das gewünschte Ergebnis.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 30. Juli 2014 18:13
    Moderator
  • Hallo Stefan,

    ich will nur eine Spalte sortieren.

    Die Spalte wird mir so angezeigt:

    980

    ...

    167

    1315

    Der höchste Wert sollte immer oben stehen.

    Macht SQL aber nicht immer.

    Nur wenn die Zahlen, die gleiche Anzahl Stellen haben.

    Gruß Klaus

    Mittwoch, 30. Juli 2014 18:53
  • Hallo Klaus,

    dann ist deine Zahl eigentlich gar keine Zahl, sondern ein numerischer Wert in einem String.

    Schau mal in die Tabellendefinition. Die Spalte wird sehr wahrscheinlich als varchar, nvarchar, ... deklariert sein.

    Wenn da nur Zahlen (und ggfs. NULL) enthalten sein sollen, stell den Datentyp entsprechend auf int, ... um (der genaue Datentyp hängt davon ab, ob Kommazahlen erlaubt sind oder nicht und falls ja, mit welcher Genauigkeit, ...)

    Dann klappt es auch mit der Sortierung.

    Kannst Du den Datentyp nicht ändern, es ist aber dennoch sichergestellt, dass nur Ganzzahlen enthalten sind, kannst Du das auch so machen:

    SELECT   ...
    FROM     Tabelle
    ORDER BY CONVERT( int, SpalteX ) DESC

    Das sollte aber nur die Notlösung sein, da das bei vielen Datensätzen entsprechend Performance kostet.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert BlauesBlatt Mittwoch, 30. Juli 2014 22:03
    Mittwoch, 30. Juli 2014 21:13
    Moderator
  • Danke Stefan!

    So geht das...

    Gruß Klaus

    Mittwoch, 30. Juli 2014 22:04