Announcement

Collapse
No announcement yet.

Unterabfrage mit mehreren Tabellen

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

  • Unterabfrage mit mehreren Tabellen

    Hallo,


    ich bin neu in diesem Forum und bitte um Hilfe.
    Folgende Situation:
    Tabelle 1: Auftragseingang mit den Feldern Auftrag, Zeile, Item, AE-Wert

    Tabelle 2: Document Dimension mit den Feldern Document No_, Line No_, Dimension Code, Dimension Value Code

    Tabelle 3: Document Dimension Archive den Feldern Document No_, Line No_, Dimension Code, Dimension Value Code

    In Tabelle 1 stehen alle Auftragseingänge. In Tabelle 2 stehen Dimensionswerte aktiver Aufträge, die zu Auswertungszwecken verwendet werden sollen. In Tabelle 3 stehen Dimensionswerte abgeschlossener Aufträge. Es gibt also zu jedem Satz in Tabelle 1 mind. einen zugehörigen Datensatz; entweder in Tabelle 2 oder in Tabelle 3.

    Die Abfrage

    SELECT AE.AUFTRAG, AE.ZEILE, AE.ITEM, AE.AE-Wert, DIM.[Dimension Value Code]
    FROM Auftragseingang AS AE Left OUTER JOIN
    [Document Dimension] AS DIM ON AE.AUFTRAG = DIM.[Document No_] AND AE.ZEILE = DIM.[Line No_]

    gibt im Feld [Document Value Code] NULL zurück, wenn in der Tabelle 2 (Document Dimension) kein zugehöriger Datensatz zu finden ist. Dieser steht aber in Tabelle 3 (Document Dimension Archive).

    Wie kann ich die dritte Tabelle so in meine Abfrage einbauen dass Tabelle 3 abgefragt wird, wenn Tabelle 2 keinen Treffer liefert?

    Danke für Eure Hilfe

  • #2
    Hallo oh07,

    entweder beide Tabellen per Union verbinden und dann darauf joinen oder einen weiteren join auf die Archive Tabelle und den "nicht NULL" Wert der beiden Tabellen ausgeben; ging auch mit dem Befehl COALESCE statt ISNULL.
    Musst Du mal bei Dir prüfen, wie es am besten passt und was performanter ist.

    [highlight=SQL]
    -- Per Union verbinden
    SELECT AE.AUFTRAG, AE.ZEILE, AE.ITEM, AE.AE-Wert
    ,DIM.[Dimension Value Code]
    FROM Auftragseingang AS AE
    Left OUTER JOIN
    (SELECT [Document No_], [Line No_]
    FROM [Document Dimension]
    UNION ALL
    SELECT [Document No_], [Line No_]
    FROM [Document Dimension Archive]
    ) AS DIM
    ON AE.AUFTRAG = DIM.[Document No_]
    AND AE.ZEILE = DIM.[Line No_]

    -- Separat joinen
    SELECT AE.AUFTRAG, AE.ZEILE, AE.ITEM, AE.AE-Wert
    ,ISNULL(DIM.[Dimension Value Code]
    ,DIMA.[Dimension Value Code]) AS [Dimension Value Code]
    FROM Auftragseingang AS AE
    Left OUTER JOIN
    [Document Dimension] AS DIM
    ON AE.AUFTRAG = DIM.[Document No_]
    AND AE.ZEILE = DIM.[Line No_]
    Left OUTER JOIN
    [Document Dimension Archive] AS DIMA
    ON AE.AUFTRAG = DIMA.[Document No_]
    AND AE.ZEILE = DIMA.[Line No_]
    [/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

    Working...
    X