AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Eine etwas komplexere Sortierung
Thema durchsuchen
Ansicht
Themen-Optionen

Eine etwas komplexere Sortierung

Ein Thema von pinhead · begonnen am 17. Mai 2006 · letzter Beitrag vom 17. Mai 2006
Antwort Antwort
Seite 1 von 2  1 2      
pinhead

Registriert seit: 17. Mai 2006
10 Beiträge
 
#1

Eine etwas komplexere Sortierung

  Alt 17. Mai 2006, 09:45
Datenbank: MS SQL • Zugriff über: ADO
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?
Miniaturansicht angehängter Grafiken
beispiel_569.jpg  
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#2

Re: Eine etwas komplexere Sortierung

  Alt 17. Mai 2006, 10:05
Ein einfaches ORBER BY in der Abfrage tut es nicht ?

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 ...
  Mit Zitat antworten Zitat
pinhead

Registriert seit: 17. Mai 2006
10 Beiträge
 
#3

Re: Eine etwas komplexere Sortierung

  Alt 17. Mai 2006, 10:33
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
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Eine etwas komplexere Sortierung

  Alt 17. Mai 2006, 10:44
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
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Eine etwas komplexere Sortierung

  Alt 17. Mai 2006, 11:48
Oder mit coalesce... ist einfacher:

select * from tabelle order by coalesce (feld1,feld2,feld3,feld4,feld5)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
pinhead

Registriert seit: 17. Mai 2006
10 Beiträge
 
#6

Re: Eine etwas komplexere Sortierung

  Alt 17. Mai 2006, 12:14
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 ^^
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Eine etwas komplexere Sortierung

  Alt 17. Mai 2006, 12:21
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)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#8

Re: Eine etwas komplexere Sortierung

  Alt 17. Mai 2006, 12:28
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 ...
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Eine etwas komplexere Sortierung

  Alt 17. Mai 2006, 12:28
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
  Mit Zitat antworten Zitat
pinhead

Registriert seit: 17. Mai 2006
10 Beiträge
 
#10

Re: Eine etwas komplexere Sortierung

  Alt 17. Mai 2006, 12:49
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz