"Ordnerartige" Struktur in SELECT Ausgabe

ukulele

Datenbank-Guru
Beiträge
5.107
Ich versuche in einer Tabelle, die in der Anwendungen auch nur als solche ausgegeben wird, mit Hilfe einer zusätzlichen Bezeichnung soetwas wie eine Ordnerstruktur abzubilden.

Die Tabelle hat einen Primärschlüssel und einen Fremdschlüssel der bei einem vorhandenen Vorgänger auf den Primär Schlüssel verweisst.Per Trigger bekommt jeder Eintrag das passende "Level" also die Nummer der Ebene mit. Außerdem habe ich eine Bezeichnung und eine modifizierte Bezeichnung, in der der eigentliche Bezeichnungstext eingerückt wird, sobald es sich um einen Eintrag mit Vorgänger handelt. Hier mal ein paar Beispieldaten:

PK | FK | Bezeichnung | mBezeichnung | Level
1 | NULL | asdf | asdf | 0
2 | 1 | qwert | * qwert | 1
3 | 2 | wtf | ** wtf | 2
4 | 3 | qwe | *** qwe | 3
5 | 1 | 1234 | * 1234 | 1

Und so soll es dann auch sortiert sein, aplhabetisch nach Bezeichnung und wenn es zu der Bezeichnung Folgeeinträge gibt, diese entsprechend darunter. Natürlich können viel mehr Ebenen entstehen oder es sind halt mal keine Nachfolger vorhanden.

Natürlich habe ich schon überlegt eine Sortierungsspalte zu befüllen, ist aber auch nicht so einfach. Für Ideen bin ich dankbar.
 
Werbung:
Das hört sich sehr genau nach dem an was ich Suche, ist aber auch harter Stoff. Das meiste habe ich seit gestern schon selbst geschrieben aber so kann ich mir auch einiges sparen. Danke schonmal vorab.
 
Werbung:
Habe damit einiges expirimentiert und konnte es leider nicht sinnvoll mit HierachyID umsetzen. Lag zum einen daran, das die angebotenen Funktionen a) nicht immer funktionierten, ich glaube, da muss man was in SQL aktivieren und b) ich diese Funktionen als nicht so hilfreich empfand wie erhofft. Zum Anderen kam meine ANwendung mit sowas überhaupt nicht kar :)

Eine Sache in dem Artikel hat mich aber gut voran gebracht. Habe mir dort ein SELECT umgeschrieben und als Sicht abgelegt, das den Pfad generiert. Der wird dann per Trigger aus der Sicht geholt, neben jede Menege anderen Arbeitsschritten. Hier mal die Sicht die den Pfad ermittelt (Auszug aus dem Artikel):

Code:
with c as (
  select '/'+cast(billID as varchar(49)) as path,BillID
  from dbo.bill b
  where b.parentBillID is null
    union all
  select cast(c.path+'/'+CAST(b.billID as varchar(4)) as varchar(50)),    b.billID
  from dbo.bill b join c on b.parentBillID = c.billID)
select c.path+'/',b.descr
from c join dbo.bill b on c.billID = b.billID
order by 1;
 
Zurück
Oben