SQL Tabelle nach Vorgabe einer anderen Tabelle sortieren

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Lightsource.

    SQL Tabelle nach Vorgabe einer anderen Tabelle sortieren

    Ich habe eine Tabelle in der verschiedene Bezeichnungen in einer Spalte stehen.
    Nach dieser Spalte möchte ich sortieren, aber nicht alphabetisch, sondern nach einer anderen Tabelle.

    Bezeichnung
    Irgendetwas
    Gamma

    Beta

    Gamma

    Alpha

    Delta

    Delta

    Delta



    In dieser anderen Tabelle steht für jede Bezeichnung eine Zahl als Positionsvorgabe


    Bezeichnung
    Positionsvorgabe
    Alpha
    3
    Beta
    1
    Gamma
    2
    Delta
    4

    Als Resultattabelle soll so etwas heraus kommen:

    Bezeichnung
    Irgendetwas
    Beta

    Gamma

    Gamma

    Alpha

    Delta

    Delta

    Delta


    Jetzt suche ich den SQL-Befehl.
    Mal ins Blaue geschossen: per Join beide Tabellen zusammen führen und dann nach der Spalte Reihenfolge sortieren.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hallo Danke.
    Das muss ich erst mal ausprobieren, das geht aber wahrscheinlich erst nächstes Jahr.
    Aber an join hatte ich noch nicht gedacht. Mit SQL kenne ich mich nicht so gut aus.

    Kann man das auch so anwenden, dass die Tabelle "A" dann so sortiert ist.
    Ich verwende diese nämlich als eine Art Arbeitstabelle, die tatsächlich die
    Sortierung haben soll, wie ich sie später auch anzeige. Ich weiß, dass das
    nicht im Sinne einer DB ist, aber hilft mir bei dieser kleinen Tabelle den
    Überblick zu behalten (max 20Zeilen). Ich muss auch noch diverse Zeilen
    dazwischen fügen, die abhängig von den bereits vorhandenen Daten sind,
    sowie Berechnungen, die aus unterchiedlichen Zeilen zusammen gesetzt
    werden.
    Du hast keinen Einfluss darauf, wie die Tabelle in der Datenbank intern sortiert ist.

    Deswegen sortierst du beim SELECT.
    Und wenn du später noch ein paar Einträge hinzufügst, stehen die in der Datenbank wahrscheinlich ganz hinten, aber durch das ORDER bekommst die sie an der richtigen Stelle angezeigt.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    Du hast keinen Einfluss darauf, wie die Tabelle in der Datenbank intern sortiert ist.
    .


    Das weiß ich. Aber da ich ein fauler Mensch bin, ist es für mich einfacher, sobald ich mit
    SQL-Developer arbeite, die Tabelle dort gleich so zu sehen, wie ich sie brauche.
    Und das gilt für mich auch nur für diese eine Tabelle...
    Dann ist es z.B. für mich einfacher die Tabelle zu löschen, und sortiert aus einer View
    wieder zu füllen. :D
    KLAPPT NUR BEI FOLGENDEN VORAUSSETZUNGEN:
    - Datenbanktyp: Microsoft SQL Server
    - Tabelle hat keine Identity-Felder
    - Es verweisen keine Foreign-Key Contraints auf TabelleA

    Der folgende Befehl erstellt ein Backup deiner Original-Tabelle und eine Microsoft-Temporär-Tabelle (Das mit dem #-Zeichen vorneweg). Wichtig bei der Temporärtabelle: Sie exisitiert nur für die Dauer deiner Session. Also im SSMS Nur solange dein Fenster mit der Query geöffnet ist und in deiner Anwendung bis zum Connection.Close. Danach ist es unmöglich auf die Daten deiner Temporärtabelle erneute zuzugreifen. Deshalb muss der gesamte Code zusammen abgefeuert werden.

    Im Anschluss an das Erstellen der Temporärtabelle wird die Originaltabelle gelöscht und aus der Temporärtabelle wird eine neue Tabelle erstellt die Wunschgemäß sortiert ist. Wenn du dir unsicher bist, dann beschäftige dich lieber vorher intensiv mit SQL und Transactions. Mit diesen kann du unter Umständen ein Rollback durchführen, wenn deine Query auf Fehler läuft.

    Spoiler anzeigen

    SQL-Abfrage

    1. SELECT *
    2. INTO TabelleA_BKP
    3. FROM TabelleA
    4. SELECT *
    5. INTO #TabelleA
    6. FROM TabelleA
    7. DROP TABLE TabelleA
    8. SELECT
    9. A.*
    10. INTO TabelleA
    11. FROM #TabelleA A
    12. LEFT JOIN Positionsvorgabe V ON A.Bezeichnung = V.Bezeichnung
    13. ORDER BY V.Positionsvorgabe ASC


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.