Announcement

Collapse
No announcement yet.

Verknüpfte Liste

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verknüpfte Liste

    Hallo liebes Forum,

    Ich habe eine Datenbank, welche historische Werte mitführt.

    Tabelle: Prod
    ID | Produkt
    1 | A
    2 | B
    3 | A
    4 | C
    5 | B
    6 | A
    7 | B
    8 | A
    9 | C


    Jetzt brauche ich jedoch einen Select, welcher mir das ganze als
    Verkettete Liste ausgibt.

    Ungefähr so: [VG = Vorgänger, NF = Nachfolger]

    ID | VG | NF
    1 |Null| 3
    2 |Null| 5
    3 | 1 | 6
    4 |Null| 9
    5 | 2 | 7
    6 | 3 | 8
    7 | 5 |Null
    8 | 6 |Null
    9 | 4 |Null


    Nur mal mit VG brachte mich das hier nicht ans Ziel
    Code:
    Select P.ID, V.VID 
    From Prod AS P LEFT OUTER JOIN
    (SELECT MAX(ID) AS VID FROM Prod AS HP WHERE ID < P.ID AND P.Produkt
    = HP.Prod) AS V
    Als Skalare Funktion bekomme ich den geklammerten Teil ohne Probleme
    hin. Nur denke ich nicht, daß dies der Weg ist, den man gehen sollte.

    Danke für eure Hilfe.

  • #2
    Welche DB verwendest Du denn? In Oracle kann man dazu connect by verwenden.

    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      Ms sql 2005

      Comment


      • #4
        [highlight=sql]CREATE TABLE #Prod
        (id int identity(1,1), Produkt char(1));
        GO
        INSERT INTO #Prod VALUES ('A');
        INSERT INTO #Prod VALUES ('B');
        INSERT INTO #Prod VALUES ('A');
        INSERT INTO #Prod VALUES ('C');
        INSERT INTO #Prod VALUES ('B');
        INSERT INTO #Prod VALUES ('A');
        INSERT INTO #Prod VALUES ('B');
        INSERT INTO #Prod VALUES ('A');
        INSERT INTO #Prod VALUES ('C');
        GO

        SELECT *,
        (SELECT MAX(id) FROM #Prod AS SUB
        WHERE SUB.Produkt = A.Produkt
        AND SUB.id < A.id) AS VG,
        (SELECT MIN(id) FROM #Prod AS SUB
        WHERE SUB.Produkt = A.Produkt
        AND SUB.id > A.id) AS NF
        FROM #Prod AS A
        ORDER BY A.id

        GO
        DROP TABLE #Prod[/highlight]
        Ergebnis:
        [highlight=code]id Produkt VG NF
        ----------- ------- ----------- -----------
        1 A NULL 3
        2 B NULL 5
        3 A 1 6
        4 C NULL 9
        5 B 2 7
        6 A 3 8
        7 B 5 NULL
        8 A 6 NULL
        9 C 4 NULL[/highlight]
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          hey Danke, funktioniert.

          Comment

          Working...
          X