Announcement

Collapse
No announcement yet.

SQL Befehl - Stücklistenebenen auflösen??

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

  • SQL Befehl - Stücklistenebenen auflösen??

    Hallo zusammen,

    Wir arbeiten in unserem Betrieb mit Stücklisten. Eine Stückliste kann als ein fertiges Produkt angesehen werden. Ein fertiges Produkt beinhaltet die Artikel aber auch Unterstücklisten aus denen es besteht. Die Unterstückliste kann auch wieder aus Unterstücklisten bestehen. Das kann sich über viele Ebenen so hinziehen.

    z.B.

    Mutterstückliste
    |-Artikel A
    |-Artikel B
    |-Stückliste A
    ---|-Artikel A
    ---|-Artikel B
    ---|-Stückliste B
    ------|- Artikel A
    ------|- Artikel B
    ------|- Stückliste C

    und so weiter...

    Stücklisten, die Unterartikel/Stücklisten enthalten zeichen sich dadurch aus, dass die Artikelnummer mit einer Zahl beginnt die >= 370 ist. Alle Artikel, deren Nummer mit einer niedrigeren Zahl beginnt ist ein einzelner Artikel ohne Unterartikel. (z.B Schrauben etc.)

    Das ganze wird in unserem ERP in zwei Tabellen verwaltet.

    1. Stücklisten
    2. Stücklistenpositionen

    diese werden jeweils über das Feld "Stücklistennummer" verjoint.

    In der Tabelle Stücklistenpositionen sieht das in etwa so aus:

    Stückliste | Artikel
    _________ |_________
    Stückliste A | Artikel A
    Stückliste A | Artikel B
    Stückliste A | Artikel C
    Stückliste A | Stückliste B
    Stückliste B | Artikel D
    Stückliste B | Artikel E
    Stückliste B | Stückliste C

    und so weiter

    Wie kann ich jetzt eine "Mutterstückliste" in alle Unterstücklisten/Artikel auf allen Ebenen auflösen? Weiss dazu jemand Rat?

  • #2
    Da es sich um den SQl Server 2005 handelt, lassen sich hier CTE's verwenden
    Dazu hier ein schönes Beispiel:
    http://www.webinade.com/web-developm...-relationships

    bye,
    Helmut

    Comment


    • #3
      Das von Helmut genannte Beispiel musst Du nur etwas erweitern, da Du nicht eine Struktur hast.
      [highlight=SQL]-- Bestandteile
      CREATE TABLE #Items (ListNr int, Item int);
      -- Normale Artikel
      INSERT INTO #Items VALUES (1, 1001);
      INSERT INTO #Items VALUES (1, 1002);
      INSERT INTO #Items VALUES (2, 2001);
      INSERT INTO #Items VALUES (2, 2002);
      INSERT INTO #Items VALUES (3, 3001);
      INSERT INTO #Items VALUES (3, 3002);
      -- Stückliste 2 enthält auch 1
      INSERT INTO #Items VALUES (2, 1);
      -- und 3 auch 2 und somit inkl 1
      INSERT INTO #Items VALUES (3, 2);
      GO
      DECLARE @Nr int
      SET @Nr = 3 --Stückliste Nr 1-3 auswählen

      -- Rekursive mit CTE
      ;WITH PartListRec (ListNr, Item, RecLevel)
      AS (SELECT M.ListNr, Item, 0 AS RecLevel
      FROM #Items AS M
      WHERE M.ListNr = @Nr
      UNION ALL
      SELECT S.ListNr, S.Item, (M.RecLevel + 1) AS RecLevel
      FROM #Items AS S
      INNER JOIN PartListRec AS M
      ON S.ListNr = M.Item
      )
      SELECT *
      FROM PartListRec
      WHERE Item > 370 -- Nur die Artikel selbst
      ORDER BY ListNr, Item
      GO
      DROP TABLE #Items;[/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


      • #4
        Hallo Olaf. Danke für deine Antwort. Kannst du mir ein Buch empfehlen, in welchem die SQL Sprache mit Microsoft SQL Server von Grund auf erläutert wird. Ich glaube, langsam muss ich mich doch wieder ein wenig mehr damit befassen. Danke und Gruss

        Comment


        • #5
          Die erste Quelle ist die Online-Hilfe; Befehl markieren und F1 drücken, schon kann man alles nachlesen.

          Ich habe das Buch "SQL Server 2008 Transact-SQL Recipes" bekommen, das geht von A-Z alle T-SQL Befehle durch und erläutert auch, wie es funktioniert.
          Ich arbeite schon jahrlang mit dem MSSQL, habe aber auch noch so einiges lernen können und man lernt ja nie aus.
          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

          Working...
          X