Announcement

Collapse
No announcement yet.

SQL Sort mit Bedingung?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL Sort mit Bedingung?

    Hallo Ihr lieben,

    hier muss ich ein Select mit einer Sort abfrage starten.

    Die Sort funktion muss aber folgendes enthalten

    Beispiel....

    testvar:="AAA"

    select irgendwas
    from Tabelle 1 und 2
    joins bluber bluber....
    Sort cast(trim(<<testvar2>> FROM ID) AS REAL)
    Into :Myarray

    wie kann ich das nun in die Abfrage unter Sort einbauen??

    Hat hier einer eine Idee

    Schöne Grüße

  • #2
    Sort cast(trim(<<testvar2>> FROM ID) AS REAL)
    Und was genau soll das jetzt machen? Was ist testvar2 und was ist FROM ID? Eine Tabelle? Im ORDER BY kannst Du keine Selects einbauen wie sollte da eine Sortierung herauskommen. Wenn, dann musst Du sie mit in die JOIN Bedingung aufnehmen.

    Wenn Du die Spalte in einen bestimmten Datentyp umwandeln möchstest, kannst Du einfach die entsprechenden Funktionen deiner Datenbank verwenden. In Oracle würde man dazu z.B. to_number(testvar2) verwenden.

    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      Sort cast(trim(<<testvar2>> FROM ID) AS REAL)

      Testvar2 ist ein String dieser enthält eine Zeichen Kette, die mit dem trim gefiltert wird und mit Cast in Real umgewandelt wird.

      Somit ist also ID das Feld einer Tabelle

      Ich führe natürlich kein Select aus.

      Sinn und Zweck ist es,

      eine Tabelle, bzw das Ergebnis der Abfrage
      auf Basis eines Stringfeldes welches ein Prefix hat,
      gefiltert nach dem Prefix aufsteigend zu sortieren.

      Das PRefix kann mitunter AAA oder aber auch AAB, AAC ZZZ oder auch A7B sein.

      Dahinter kommt immer eine Zahl
      von 1 bis irgendwas.

      Mit unter interessieren alle Werte des Gesamtbereichs, oder aber auch nur Teilbereiche.

      Aber in jedem Fall muss ich diese Ergebnisse nach der Zahl hinter dem PRefix sortieren.

      Obige Abfrage sieht in einem Select folgender massen aus

      Select max(cast(trim(<<testvar2>> FROM ID) AS REAL))

      Jetzt ist meine Frage, wie ich ein Ergebnis innerhalb einer Abfrage

      Select Felder
      From Tabelle
      Where Feld=:MyVar
      order by 1 DESC

      Dabei muss ich 1 gegen etwas ersetzen was Sinn macht.

      Also nach einer Zahl aus dem Feld sortieren.

      Leider weiss ich gerade nicht wie ich das machen soll...

      Comment


      • #4
        Somit ist also ID das Feld einer Tabelle
        Nach dem From steht aber der Tabellename

        Comment


        • #5
          Also Du kannst ja Stringfunktionen auch im ORDER BY verwenden (wobei alle TRIM Funktionen die ich bisher verwendet habe immer nur die Leerzeichen vorne und hinten entfernten).
          Wenn der Prefix eine bestimmte Länge hat, kannst Du SUBSTR verwenden. Falls das nicht der Fall ist, musst Du erst die Position der 1 mittels INSTR suchen und das Ergebnis dann als Parameter für SUBSTR verwenden. Den Substring kannst dann wiederum in eine Zahl umwandeln und danach sortieren.

          Die 2 oder ggf. auch 3 Funktionen musst Du also ineinander Schachteln.

          Dim

          PS: Das sind jetzt die Funktionsnamen aus Oracle. Du hast uns dein DBMS ja noch nicht verraten.
          Zitat Tom Kyte:
          I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

          Comment


          • #6
            Ja theoretich schon, aber nicht in einem Cast, bzw in einem TRIM Da steht das der Inhalt von Testvar1 FROM FELD. so ist der Befehlt Trimm halt aufgebaut. In diesem Fall steht also nicht Die Tabelle sonder das Feld.

            Meine Lösung habe ich gerade gefunden.....

            Die ist ganz einfach!!!
            Da hatte ich einen ganzen Lattenzaun vorm Kopf

            mit Select Cast(TRIMM(:MyVAR FROM FELD)AS REAL)

            und order by 1 kommt natürlich das richtige Ergebnis raus...

            Ich wollte nur was umständliches ausprobieren, dabei ist die Lösung so nahhhhhh...

            Danke :-)

            Comment


            • #7
              Um welches DBMS handelt es sich den?

              Comment


              • #8
                Hallöchen dimitri,

                nun ich habe versucht das Trimm und cast in einem Order Befehl auszuführen.... was allerdings bis jetzt noch nicht funktioniert hat.... Aber ich werde auch das noch weiter probieren, da dieser an der Stelle nciht verkehrt ist und unter Umständen noch Sinn machen kann.

                Mein Ergebnis oben ist zunächst das was ich wollte.

                Mein DBMS ist 4DSQL daher poste ich hier, da es keine RUbrik gibt, aber eigentlich brauche ich auch nur Standart SQL92 zu posten, damit komme ich ja klar und kann den Rest spezifisch umsetzen.

                Aber der Trimm kann auch so ausgeführt werden

                MytestVar:="ABC"
                Trim(:MytesVar from Feld) as ....

                damit wird "ABC" vom String raus genommen und der Rest bleibt.

                Das funktioniert einwandfrei.

                Comment


                • #9
                  Hallo Markus Kinzler,

                  4DSQL Aber wie gerade gepostet, SQL92, den Rest kann ich
                  umsetzen

                  Comment

                  Working...
                  X