Jump to content

SQL-Abfrage für Sortierung

Empfohlene Beiträge

Hallo Zusammen,

ich habe folgendes Problem ich möchte Artikel Sortiert ausgeben. Die Felder enthalten Text und Zahlen.

Beispiel:

- Holzschraube 10 x 120

- Holzschraube 10 x 13

So würde beispielsweise ein wirres durcheinander bei der Ausgabe erscheinen. Ich möchte dieses allerdings in geordneter  Reihenfolge haben also so:

- Holzschraube 10 x 13

- Holzschraube 10 x 120

Ist das überhaupt möglich mit einer SQL-Abfrage?

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Kommt darauf an. :)

Wenn alle deine Texte dem gleichen Muster folgen dann ja.

Also immer

Text - Leerzeichen - Größe1 - ...

Dann kannst du auch nach Teilstrings sortieren.

Also ein

order by left([String], charindex(' ', [String]), ...

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Klar ist das möglich. Die Frage ist ob das ein Problem ist, das man mit SQL angehen sollte.

Ich sehe spontan mehrere Möglichkeiten, zu aller erst musst du die Werte die dir wichtig sind alleine kriegen (damit du darauf sortieren kannst). Das kannst du, wie z.B. Enno schon beschrieben hat machen.

Du könntest diese Daten z.B. auch in eine temporäre Tabelle oder in einen View packen - das bedeutet zwar am Anfang mehr Arbeit.. wird dir aber letztendlich das abfragende Query sehr erleichtern.

Die Alternative ist, dass man sich innerhalb der Applikation alle Daten holt und die split und sortier Logik dann dort implementiert, was wesentlich einfacher sein sollte.

Die eigentliche Lösung ist aber, nicht mit diesen Daten rum zu hantieren sondern dir die Zeit zu nehmen diese Daten ordentlich zu normalisieren. Alleine dass du dir die Frage stellst, is eigentlich ein "smell" dafür, dass die Daten nicht ordentlich normalisiert sind :-)

bearbeitet von DashDash

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Bei dem Beispiel würde doch ein "order by ... desc" reichen?

 

Oder sieht das erweiterte Beispiel (mit unsinnigen Zahlen) so aus:

- Holzschraube 8 x 4

- Holzschraube 8 x 12

- Holzschraube 10 x 8

- Holzschraube 10 x 13

- Holzschraube 10 x 120

- Holzschraube 10 x 130

Dann greifen die Lösungen der Beiden vor mir.

 

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Wenn man Zahlen in Textfeldern alphabetisch sortiert kommt natürlich sowas raus:

Artikel Größe 1
Artikel Größe 1000
Artikel Größe 111
Artikel Größe 2

Hier könnte man mit Vornullen als Konvention arbeiten, dann wird nach alphabetischer Sortierung sowas draus:

Artikel Größe 0001
Artikel Größe 0002
Artikel Größe 0111
Artikel Größe 1000

Man könnte es auch wie @allesweg machen (zwei Teilstrings als Parameter für ORDER BY, ggf. automatisch Vornullen kann man mal mittels z.B. RIGHT("0000" + Zahl, 4) machen).

Aber eigentlich hat @DashDash vollkommen recht - ein Zerpflücken von Text zum Sortieren macht man vllt. mal beim Import von Fremddaten aber man möchte solche "Kraut-und-Rüben-Felder" eigentlich nicht in der DB haben.

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Hört sich gut an. Größen sind tricky, weil die nicht unbedingt standardisiert sind.. jedes Land hat ihre eigenen größen und man kann in der Regel nicht von dem Größenraster eines Artikels auf einen anderen Artikel übertragen. 

Ich würde das ganze warscheinlich etwas komplizierter angehen. Anfangen würde ich mit der Definition einer Größenraster Tabelle, die hätte eine Referenz auf verschiedene Größen und einen sortkey. Eine Größe wäre erstmal nur als Name definiert (wo man später noch mehr Felder hinzufügen kann).

Die Artikel würden dann eine Größe referenzieren. Wenn du sortieren möchtest, müsstest du über die Größe zum Größenraster hinjoinen und könntest dann sortieren anhand des sort keys. Der Vorteil ist, das du dann auch andere Größen für allerlei Artikel ordentlich sortieren kannst - weil es eben nur innerhalb eines Artikel Größenrasters sortierst. Wenn du alle Artikel sortierst, müsstest du doppelt sortieren nämlich einfach z.B. auf dem Artikel name und dann auf dem sortkey innerhalb des Größenrasters.

Das ganze hier stützt sich auf die Annahme, dass ihr nicht ausschließlich Schrauben nutzt wo dasselbe Größenraster genommen wird.

 

Das ganze soll natürlich nur als Denkanstoß für dich dienen :-)

bearbeitet von DashDash

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
vor 2 Stunden schrieb murat1895:

Wir werden dann wohl ein anderweitiges Feld in der DB erstellen und dieses vernünftig trennen -.- Denke das ist dann auch die beste und sauberste Lösung.

So eine Art "SortOrder" und dann "ORDER BY SortOrder ASC"? Wärst nicht der erste, der sowas macht. ;) 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
vor 52 Minuten schrieb Goulasz:

So eine Art "SortOrder" und dann "ORDER BY SortOrder ASC"? Wärst nicht der erste, der sowas macht. ;) 

Ja, später dann auf die neuen Spalte mit den entsprechenden Attributen, also länge, breite, gewicht usw.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Wenn es in deiner DB nicht nur Holzschrauben verschiedener Größe gibt (dann wäre aber auch die Angabe "Holzschraube" sinnlos), sondern auch andere Produkte, dann würde ich auch im Sinne der Normalisierung Produkt und Bemaßung trennen.

Idealerweise, wenn dein DBMS sowas kann, wäre dann die Bemaßung ein Geometrie-Objekt.

 

Gruß Martin

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2019 SE Internet Services

fidelogo_small.png

if_icon-6-mail-envelope-closed_314900.pnSchicken Sie uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App


Get it on Google Play

Kontakt

Hier werben?
Oder senden Sie eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung