Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Eine etwas komplexere Sortierung (https://www.delphipraxis.net/69571-eine-etwas-komplexere-sortierung.html)

pinhead 17. Mai 2006 09:45

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? :)

jensw_2000 17. Mai 2006 10:05

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:
SELECT * FROM <TABELLENNAME>
ORDER BY Name1,Name3,Name5
- 1. Sortierung auf Name1
- 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 ...

pinhead 17. Mai 2006 10:33

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 :)

mikhal 17. Mai 2006 10:44

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:
 ...
ORDER BY
  IsNull(Name1, IsNull(Name2, IsNull(Name3, IsNull(Name4, Name5))))
Nicht getestet!

Grüße
Mikhal

alzaimar 17. Mai 2006 11:48

Re: Eine etwas komplexere Sortierung
 
Oder mit coalesce... ist einfacher:

SQL-Code:
select * from tabelle order by coalesce (feld1,feld2,feld3,feld4,feld5)

pinhead 17. Mai 2006 12:14

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 ^^

alzaimar 17. Mai 2006 12:21

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)

jim_raynor 17. Mai 2006 12:28

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 ...

marabu 17. Mai 2006 12:28

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:
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
Grüße vom marabu

pinhead 17. Mai 2006 12:49

Re: Eine etwas komplexere Sortierung
 
Zitat:

Zitat von marabu
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:
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
Grüße vom marabu

Mhh.. erstmal kommt die Meldung im Enterprise-Manager "Der Designer stellt das SQL UNION Construct nicht bereit.".

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.
Seite 1 von 2  1 2      

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