![]() |
Datenbank: MS SQL • Zugriff über: ADO
Eine etwas komplexere Sortierung
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen! :)
Folgende Problemstellung: Ich habe eine unsortierte Tabelle in der in 5 verschiedenen Feldern Nachnamen vorkommen könnnen. Nun muss ich diese Tabelle so in ein Dataset einlesen, dass sie von A bis Z sortiert ist, allerdings nicht nur in einem Feld, sondern in allen 5. Im Anhang ein kleines Beispiel zum besseren Verständniss. Hat jemand eine Idee dazu, die nicht mit viel Arbeit verbunden ist? :) |
Re: Eine etwas komplexere Sortierung
Ein einfaches ORBER BY in der Abfrage tut es nicht ? :gruebel:
Du kannst dich mehrere Felder in der Sortierung eingeben.
SQL-Code:
- 1. Sortierung auf Name1
SELECT * FROM <TABELLENNAME>
ORDER BY Name1,Name3,Name5 - wenn Name1 gleich dann 2. Sortierung auf Name3 - wenn Name 1 und 2 gleich dann 3. Sortierung auf Name5 PS: Dein Screenshot sieht irgendwie so aus, als solltest du dein Datenbankdesign nochmal überdenken ... |
Re: Eine etwas komplexere Sortierung
Dann sortiert er hauptrangig Feld1 von A-Z. Nur wenn ein eintrag in Feld1 mehrfach vorkommt, wird dann innerhalb dieses Blocks nochmal nach Feld2 sortiert...
Leider nicht die Lösung des Problems. Der Screenshot war nur ein Beispiel. Die Tabelle sieht etwas anders aus und hat schon so ihren Sinn :) |
Re: Eine etwas komplexere Sortierung
Versuch's mal mit der Function IsNull des SQL Servers das Konstrukt sähe dann etwa so aus:
SQL-Code:
Nicht getestet!
...
ORDER BY IsNull(Name1, IsNull(Name2, IsNull(Name3, IsNull(Name4, Name5)))) Grüße Mikhal |
Re: Eine etwas komplexere Sortierung
Oder mit coalesce... ist einfacher:
SQL-Code:
select * from tabelle order by coalesce (feld1,feld2,feld3,feld4,feld5)
|
Re: Eine etwas komplexere Sortierung
Leider sortiert er bei beiden Methoden wieder vorrangig nach Feld1...
Es geht halt um folgendes: Bsp.: Wenn mittendrin in der Tabelle ein Datensatz kommt in dem das Feld Name1 den Wert "Marius" aber das Feld Name4 den Wert "Arnold" hat, so muss der Datensatz 2 mal erscheinen... einmal ziemlich am Anfang bei A (wegen "Arnold" in Name4) und einmal bei M (wegen "Marius" in Name1). Ist leider schwieriger zu erklären als ich dachte, aber ich hoffe so versteht man es ein wenig besser ^^ |
Re: Eine etwas komplexere Sortierung
Aha, pro Eintrag in Feld1...Feld5 eine Zeile im Resultat.
SQL-Code:
select * from tabelle where feld1 is not null
union select * from tabelle where feld2 is not null union select * from tabelle where feld3 is not null union select * from tabelle where feld4 is not null union select * from tabelle where feld5 is not null order by coalesce (feld1,feld2,feld3,feld4,feld5) |
Re: Eine etwas komplexere Sortierung
Nur mal so als Anmerkung. Könnte es sein, dass die Datenbank schlecht designt ist? Oder warum hast du in einem Datensatz 5 Vornamen, wenn dann sowieso wieder nach jedem Vornamen einzeln sortiert werden soll ...
|
Re: Eine etwas komplexere Sortierung
Jens hat es schon in Beitrag #2 angedeutet - die Tabelle ist nicht in der ersten Normalform. Die Wiederholungsgruppe muss zuerst aufgelöst werden:
SQL-Code:
Grüße vom marabu
select name1 as name, * from tabelle where name1 is not null
union select name2 as name, * from tabelle where name2 is not null union select name3 as name, * from tabelle where name3 is not null union select name4 as name, * from tabelle where name4 is not null union select name5 as name, * from tabelle where name5 is not null order by name |
Re: Eine etwas komplexere Sortierung
Zitat:
Dann scheint er es aber doch zu machen... Aber leider weiss ich nicht wie ich das auf meine Tabelle(n) anwenden soll, da die Felder 1-5 eigtl nur ID's sind die auf eine weitere Tabelle verweisen, welche dann unter den ID's die dazugehoerigen Namen stehen hat... Momentan spucke ich die Namen dann mit "Left outer Join" aus, aber wie ich das auf dein Beispiel anwenden kann, weiss ich leider nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz