SQL Mehrfaches Sortieren

thomas28

Ensign
Registriert
Jan. 2005
Beiträge
254
Hallo zusammen,

ich stehe vor folgendem Problem:
Ich habe eine Tabelle mit einer ID und einer ParentID.
Einer ID kann eine ParentID zugewiessen sein.
Das sieht dann ungefähr so aus:

ID ¦ Parent ID

9712 ¦ 9530
9748 ¦ 9530

9640 ¦ 9630
9850 ¦ 9630

Ich habe die Tabelle zuerst nach der Parent ID sortiert und anschliessend nach der ID.
Soweit sogut.

Nun möchte ich aber nochmals in dieser Gruppe nach der ID Sortieren. D.h. 9640 ist kleiner als 9712 und dieser Block sollte daher zuerst kommen.

Gewünschtes Ergebnis also:

9640 ¦ 9630
9850 ¦ 9630

9712 ¦ 9530
9748 ¦ 9530


Hat jemand einen Rat?
Vielen Dank schonmal

thomas28
 
Sieht so aus als ob du die ParentID absteigend sortierst und die ID aufsteigend, ist das so gewollt? Zeig doch mal dein SQL.
 
SELECT ticket_id , parent_id FROM Test
ORDER BY parent_id, ticket_id

liefert folgendes Ergebnis:

9712 ¦ 9530
9748 ¦ 9530
9640 ¦ 9630
9850 ¦ 9630

gewünschtes Ergebnis wäre aber:

9640 ¦ 9630
9850 ¦ 9630
9712 ¦ 9530
9748 ¦ 9530

Da 9640 kleiner als 9712 ist, soll dieser Datensatz zuerst kommen.
Die 9850 soll aber, da selbe ParentID wie 9640 auch vor 9712 stehen.
 
Google mal "group by" und "order by".
 
Zuletzt bearbeitet:
Also wenn ich dich nicht falsch verstehe, dann ist das so nicht möglich. Es gibt eben nur ein Hauptkriterium fürs sortieren, deine letzte Bedingung würde das allererste sortieren ja wieder zunichte machen.

Du kannst nach der einen ID primär sortieren (aufsteigen, absteigend, wie du willst) und innerhalb dieser Gruppe die andere ID sekundär (wieder aufsteigend, absteigend, wie du willst).
 
SELECT ticket_id , parent_id FROM Test
ORDER BY ticket_id
 
was benutzt du den für SQL? MS oder My?

Also bei MS kannst du, soweit ich weiss, order by parent_id ASC, ticket_id DESC oder umgekehrt machen.
 
Denn mit

SELECT ticket_id , parent_id FROM Test
ORDER BY parent_id, ticket_id

sortierst Du primär nach der parent_id und bei gleichen parent_id dann nach der ticket_id.
 
SELECT ticket_id , parent_id FROM Test
ORDER BY parent_id DESC, ticket_id

würde

9640 ¦ 9630
9850 ¦ 9630
9712 ¦ 9530
9748 ¦ 9530

ergeben.
 
Das hilft ihm nichts.. er will mit der kleinsten ID anfangen, dann aber gleich die ganze Gruppe mitnehmen, die die selbe ParentID hat. Ich bleib dabei, mit 2 order by geht es nicht.
 
Zuletzt bearbeitet:
Bin mir jetzt absolut nicht sicher, aber dann evtl so:

SELECT ticket_id, parent_id from Test WHERE parent_id IN (SELECT DISTINCT parent_id FROM Test ORDER BY ticket_id ASC)
 
So?
 

Anhänge

  • screenshot.2.png
    screenshot.2.png
    11,8 KB · Aufrufe: 177
Zuletzt bearbeitet von einem Moderator:
carom schrieb:
Ich bleib dabei, mit 2 order by geht es nicht.

Das vermute ich eben auch.
Wie du schreibst ich will die ganze Gruppe mitnehmen.

Ich verwende MS SQL.

@redeye86
Order by in einem Subquery funktioniert nicht.
Würde aber auch so nicht funktionieren...
 
@redeye
Ergänzung ()

@thomas
Ich hab mir sowas immer im MSAccess Wizard zusammengebastelt. Hab aber schon lang nix mehr gemacht und hier z.Z. leider kein Access zur Verfügung. Stelle mir eine verschachtelte SQL Anweisung vor. Also erstmal zwei einzelne SQL Anweisungen für die unterschiedlichen Sortierungen und dann per Union(?) Inner/Outer(?) oder so ähnlich zusammenstückeln.
 

Anhänge

  • screenshot.3.png
    screenshot.3.png
    12,6 KB · Aufrufe: 146
@vander,tm0975

SELECT ticket_id , parent_id FROM Test
ORDER BY parent_id desc, ticket_id

schaut irgendwie richtig aus - ich checks trotzdem nicht wieso das jetzt funktioniert...
aber danke auf alle fälle :D

und jetzt hab ich noch ticket_id's welche kein parent_id haben, also NULL sind.
wie bekome ich diese Tickets nach oben?
 
Ich empfehle dir die NULLER alle mit einem Wert zu belegen, zb. -1 oder sich selber (id) o.ä.
Ansonsten gibt es noch where parent_id IS NULL
 
Zuletzt bearbeitet:
Ich hab irgendwie das Gefühl das es bei den vier Datensätzen grad paßt, aber nicht alle Möglichkeiten abdeckt. Schau doch bitte mal über alle deine Daten ob es Sortierprobleme gibt.

EDIT

Ausgehend von deinem Startposting
FALSCH
SELECT ticket_id , parent_id FROM Test
ORDER BY parent_id, ticket_id

RICHTIG
SELECT ticket_id , parent_id FROM Test
ORDER BY parent_id desc, ticket_id

Hat sich nur die Umkehrung der Sortierreihenfolge für die parent_id geändert.
 
Zuletzt bearbeitet: (EDIT)
vander schrieb:
Ich hab irgendwie das Gefühl das es bei den vier Datensätzen grad paßt, aber nicht alle Möglichkeiten abdeckt

Richtiges Gefühl :rolleyes:
Mit anderen Werten funktioniert das schon wieder nicht.

9675 9667
9689 9667
9687 9665
9688 9665
9668 9663
9669 9663


Naja ich werd das ganze jetzt im Programmcode mithilfe von 2 Schleifen lösen...
Eine SQL Lösung wird hier wahrscheinlich zu kompliziert...
 
Zuletzt bearbeitet:
Zurück
Oben