Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

MS SQL Server Management Studio 2012 Reihenfolge von Daten festlegen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von DanielW, 14 April 2015.

  1. DanielW

    DanielW Benutzer

    Hallo Liebe Community,

    ich hoffe ich bin an der Richtigen Stelle gelandet.
    Ich möchte die Reihenfolge meiner Datensätze ändern.

    Ich habe eine Tabelle mit 2 Spalten. KundenNr. und Kunde
    KundenNr. ist der Primärschlüssel nachdem auch geordnet wird.
    Ich hätte es aber gerne, dass die Datenbank meine Daten nach dem Namen ordnet.

    Wie ich mir die Daten in gewünschter Reihenfolge anzeigen lassen kann, ist mir klar. Aber die liegen dann ja so nicht im Speicher.

    Auf meine Datenbank greift ein c# Programm zu. Dies zeigt mir in einer Combo-box alle möglichen Kunden an. Da diese dort geordnet auftauchen sollen, versuche ich aktuell die Daten in meiner Datenbank nach dem Namen geordnet zu speichern.

    Ich hoffe ich konnte mein Problem verständlich schildern und hoffe auch, das Ihr mir helfen könnt.

    Ich danke im Voraus

    Daniel
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Die interne Sortierung der Daten kann Dir völlig egal sein. Wenn die nach Namen sortiert sind, dann hänge an das Select ein ORDER BY name an, that's all.
     
  3. ukulele

    ukulele Datenbank-Guru

    Die Combobox die die Einträge aufruft muss das ebenfalls mit ORDER BY tun.

    Unter keinen Umständen wirst du die Datenbank dazu bewegen können, die Einträge nach einer Sortierung abzulegen und zu verwalten. Dann kannst du dir auch direkt wieder Karteikarten dahin legen, das wird schneller sein.
     
  4. DanielW

    DanielW Benutzer

    Wenn ich in meiner DB eine Abfrage mache, die so aussieht:

    Select *
    From Tabelle
    Order By Name ASC

    dann zeigt der mir nur die Daten einmalig in der Reihenfolge an. Wenn dann ein zweites Programm kommt, und sich die Daten holt, sind die wieder ungeordnet. Und das soll so nicht sein. Ich dachte am einfachsten wäre es, wenn ich einfach die DB Sortierung umändere.
    Muss es aber scheinbar wie Ukulele beschrieben hat machen.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Noch einmal: der Datenbank steht es vollkommen frei, wie die Daten physisch abgelegt sind. Diese Reichenfolge entspricht oft der, wie die Daten kommen, aber, um mal es bei PostgreSQL zu erklären: wenn ein Record geändert wird (UPDATE) dann bleibt der alte Record bestehen und ein neuer Record wird hinten angehangen (vereinfacht gesagt, es ist komplizierter). Oder Du machst einen JOIN über mehrere Tabellen: da steht es der DB frei, wie dieser erfolgt. Das kann z.B. über einen Hash erfolgen -> du hast eine absolut unsortierte Menge. Oder, wieder PostgreSQL: du hast 2 Abfragen auf die selbe Tabelle, die sehr groß ist (100 Millionen Zeilen). Die erste Abfrage läuft und hat die ersten 1 Million schon gelesen. Nun starten die zweite, gleiche Abfrage. PostgreSQL optimiert jetzt: beide Clients bekommen denselben 'Stream' geliefert, also Client 2 bekommt die Daten ab dem 1 Million-sten Datensatz zuerst geliefert und erst nach dem 100 Millionsten dann noch von 1 bis 1 Million 'nachgereicht'.

    (Dinge wie CLUSTER http://www.postgresql.org/docs/9.4/static/sql-cluster.html lasse ich jetzt mal außen vor)


    Fazit: willst Du eine Sortierung, dann sortiere. ORDER BY ist und bleibt Dein Freund.
     
  6. DanielW

    DanielW Benutzer

    ok, soweit so gut.
    Dann stellt sich mir gerade die Frage, wie ich sortieren soll, denn wenn ich in c# versuche zu sortieren, sagt er mir folgendes:

    "Eine ComboBox mit festgelegter DataSource kann nicht sortiert werden. Sortieren Sie die Daten mit dem zugrunde liegenden Datenmodell."
    sortieren nicht möglich.JPG
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Schickst Du da ein SQL an die DB?
     
  8. Distrilec

    Distrilec Datenbank-Guru

    Den Code für einen Button der deine ComboBox befüllt:
    Code:
    void BtnFillClick(object sender, EventArgs e)
            {
                DataTable dt = new DataTable();
              
                using(SqlConnection Con = new SqlConnection("ConnectionString"))
                {
                    using(SqlDataAdapter sqldta = new SqlDataAdapter("deine_Daten_Procedure", Con))
                    {
                        sqldta.SelectCommand.CommandType = CommandType.StoredProcedure;
                      
                        sqldta.Fill(dt);
                      
                        cbxTestbox.DataSource = dt;
                        cbxTestbox.DisplayMember = "Kunde";
                        cbxTestbox.ValueMember = "KundenNr";
                    }
                }
            }
    Der Code für die SP "deine_Daten_Procedure":
    (War das so? Ich glaube zumindest das ist richtig... :D )
    Code:
    Create Procedure deine_Daten_Procedure As
    Begin
       Select KundenNr
             ,Kunde
       From Kunden
       Order By Kunde Asc
    End
    Mehr braucht es nicht um sich die Daten zu sortieren :)
     
  9. DanielW

    DanielW Benutzer

    Was meinst du ?
    Ich wollte die sorted Eigenschaft auf true setzten
    ich habe gesagt "this.dataGridViewTextBoxColumn2.Sorted = true;"


    Distrilec, die combobox hab ich etwas anders erstellt :D:D
    recht klick auf meine Tabelle, dann spalten bearbeiten, dann die Spalte ausgesucht, und den Typ geändert.

    zu der SQL abfrage: Wenn ich das mache, zeigt SQL mir die Daten sortiert an, sie liegen aber nicht in der DB sortiert.
    Schließe ich das Fenster, wo mir dir Daten angezeigt werden, und lasse mir dann erneut die Daten anzeigen, sind sie wieder "Unsortiert".
    Wie Sie in der DB liegen ist mir ansich egal. Die dienen nur zur Weiterverarbeitung.
    Wichtig ist, wie mein c# Programm mir diese anzeigt.
     
  10. Distrilec

    Distrilec Datenbank-Guru

    Ehm... Was ? Du sprichst von einer ComboBox (die du "etwas anders" erstellt hast) und direkt davor willst du eine GridView sortieren?.... Also worum geht es hier jetzt?
    Tut mir leid... Aber ich verstehe überhaupt nicht was du eigentlich willst.
    Deine Frage ist einfach beantwortet: Ein Order By wird immer sortieren PUNKT, AUS, ENDE... Wenn deine Daten unsortiert ankommen liegt es nicht an der Datenbank... Und trotzdem drehst du dich immer wieder im Kreis und fängst damit an "aber in der DB"...

    Wie du am Ende ganz schön gesagt hast...
    Es ist kein Datenbank-Thema sondern dreht sich 100% um C#... Richtige Feststellung, oder? :)
     
  11. DanielW

    DanielW Benutzer

    Ein Order By zeigt mir die Daten sortiert an, und ändert nicht die Reihenfolge wie sie gespeichert werden, oder lieg ich da falsch ?
    Das ist meine erste Datenbankanwendung und daher tue ich mir noch relativ schwer mit all den Begrifflichkeiten etc.
    Ich erkläre mal was ich gemacht habe...

    Ich habe zwei Tabellen in der selben DB
    1. Tabelle mit 7 Spalten
    2. Tabelle mit 2 Spalten

    1. Windows Form Projekt erstellt
    2. eine Datenquelle angebunden (über Projekt, Datenquelle hinzufügen)
    3. per Drag and Drop die gewünschte Tabelle in meine Windows Form gezogen (Tabelle 1)
    ----------------------------------------------------
    beim ausführen meines Programms, bekomme ich jetzt die Daten angezeigt, die in Tabelle 1 Liegen.
    Feld Nummer 2 soll aus Tabelle 2 befüllt werden. Die zweite Spalte aus Tabelle 2 soll mir in dem Feld angezeigt werden und die erste Spalte soll in Tabelle 1 in Feld 2 gespeichert werden.
    Deshalb hab ich hier eine ComboBox erstellt. (Über Rechtsklick auf meine Tabelle, Spalten Bearbeiten und dort die Eigenschaft auf Combobox gestellt.)
    Tabelle 2 hat wie erwähnt 2 Spalten. Die, die Intern Gespeichert wird ist der Primärschlüssel (Nr). Nach dem Sortiert die Datenbank.
    Angezeigt wird mir der Name. Da in der Tabelle nach Nr sortiert wird, zeigt mir meine Combobox die Namen so an, wie sie die DB sortiert.
    Bei 100 Namen wird es dann relativ schwer, einen Speziellen namen zu finden, da diese nicht alphabetisch sortiert sind. Deshalb brauche ich eine Sortierung.
    Zu beginn habe ich gedacht, es sei der einfachste weg die DB neu zu sortieren, da mir meine Combobox die Daten so anzeigt, wie die DB die Daten sortiert. Dies ist scheinbar nicht möglich (anzeigen lassen funktioniert über Select* From tabelle Order By name, aber die werden dann nicht so gespeichert)

    Daher ist es mittlerweile zu einem c# Problem geworden. Insofern hat mich das schon mal ein Stück weiter gebracht, da ich nun weiß, wo ich weiter ansetzen muss.

    Zu dem ...dataGridView... So spreche ich meine einzelnen Felder in der Tabelle an. deshalb Oben mein codeauszug "this.dataGridView.....Sorted = true"

    Jetzt muss ich schauen, ob ich in c# weitere Möglichkeiten habe, Daten geordnet anzeigen zu lassen, da der letzte versuch über Sorted = true nicht funktioniert, da eine Combobox mit festgelegter DataSource nicht sortierbar ist.

    Aufjedenfall sage ich an alle die mir bislang geholfen haben VIELEN DANK :)
     
  12. akretschmer

    akretschmer Datenbank-Guru

    Absolut korrekt so.
     
  13. Distrilec

    Distrilec Datenbank-Guru

  14. DanielW

    DanielW Benutzer

    Das ist genau mein Problem :D
    schaue ich mir nachher mal an.

    Viel Dank :)
     
  15. DanielW

    DanielW Benutzer

    Hallo zusammen,

    ich nochmal...
    Ich hab eine weitere Idee bekommen, wie ich mein Problem lösen könnte.
    Bräuchte da aber ein wenig Hilfe.

    Ich habe vor eine weitere Spalte anzulegen. Nennen wir sie mal Hilfsspalte.
    Dann habe ich in meiner Tabelle 3 Spalten ( Nr, Firma, Hilfsspalte)
    Nr ist nach wie vor der primär schlüssel.
    Nr und Firma werden aus einer Tabelle auf einem anderen Server über eine Procuder befüllt.

    Ist es möglich, das ich sage: Hilfsspalte = die geordnete Firmenspalte

    also die firmenspalte mit per order by ordnen lasse und dann sage, pack sie genau so in die hilfsspalte

    Ich danke im Vorraus
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden