Veröffentlicht 19. Juli 20169 j 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?
19. Juli 20169 j 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]), ...
19. Juli 20169 j 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 19. Juli 20169 j von DashDash
19. Juli 20169 j 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.
19. Juli 20169 j 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.
19. Juli 20169 j Autor 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.
19. Juli 20169 j 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 19. Juli 20169 j von DashDash
19. Juli 20169 j 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.
19. Juli 20169 j Autor 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.
19. Juli 20169 j 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
20. Juli 20169 j Autor Das Problem ist nicht meine DB, sondern die des ERP-Systems... Ich weiß echt nicht was die sich damals dabei Gedacht haben...
20. Juli 20169 j Und du möchtest/kannst das ERP System nicht anpassen? Dann brauchst du das Query nur für regelmäßige/ad hoc reports?
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.