Announcement

Collapse
No announcement yet.

CASE WHEN mit Left Outer Join

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

  • CASE WHEN mit Left Outer Join

    Hallo,


    ich habe zwei Tabellen T und H. Eine davon ist eine Tabelle mit meinen Daten, die andere Tabelle ist eine Hilfstabelle.

    Die Hilfstabelle H hat nur 2 Spalten: H.E1_E2 und H.Ersatz.

    Die Tabelle T hat sehr viele Spalten aber unter anderem auch die Spalten E1 und E2.

    Ich möchte nun eine View basteln, die alle Spalten von T hat, wobei die Spalten E1 und E2 mit Werten aus H.Ersatz ersetzt werden, falls T.E1 = H.E1_E2 und/ oder T.E2 = H.E1_E2.

    Dabei sollen aber genausoviele Datensätze als Ergebnis geliefert werden, wie bei einem Select * FROM T.


    Ich hoffe das ist einigermaßen verständlich.


    Nun das Statement:


    [HIGHLIGHT=SQL]

    SELECT Spalte1, Spalte2, Spalte3 usw..,

    CASE WHEN T.E1 = H.E1_E2 THEN H.Ersatz ELSE T.E1 END AS E1,

    CASE WHEN T.E2 = H.E1_E2 THEN H.Ersatz ELSE T.E2 END AS E2,

    FROM T LEFT OUTER JOIN H

    ON T.E1 = H.E1_E2 OR ON T.E2 = H.E1_E2

    [/HIGHLIGHT]

    Leider bekomme ich durch diesen LEFT OUTER JOIN und das OR jeweils einen Datensatz mehr sobald sowohl in T.E1 = H.E1_E2 UND T.E2 = H.E1_E2 etwas übereinstimmt. >>> Doppelte Datensätze.

    Kann mir jemand etwas helfen, hab schon alles mögliche ausprobiert aber komme auf keine Lösung. DANKE.

  • #2
    Hallo,
    um doppelte Datensätze los zu werden kannst du DISTINCT verwenden.

    lg chapster

    Comment


    • #3
      Hi,

      ich kann hier nicht so einfach einen DISTINCT anwenden bei mehreren Spalten. Wüßte gar nicht auf welche Spalte.


      ich will durch den LEFT OUTER JOIN in dem ein OR steckt keine doppelten Datensätze bekommen.

      Comment


      • #4
        Hallo,

        hab das Problem scheinbar falsch verstanden.

        Du hättest vielleicht gern sowas?[highlight=sql]SELECT
        CASE WHEN T.E1 = H1.E1_E2 THEN H1.Ersatz ELSE T.E1 END AS E1,
        CASE WHEN T.E2 = H2.E1_E2 THEN H2.Ersatz ELSE T.E2 END AS E2
        FROM
        T
        LEFT OUTER JOIN H AS H1 ON T.E1 = H1.E1_E2
        LEFT OUTER JOIN H AS H2 on T.E2 = H2.E1_E2[/highlight]

        lg chapster

        Comment


        • #5
          ja super genau.

          jetzt habe ich nur noch das Problem das der Case zwar auf T.E1 wirkt, aber noch nicht auf T.E2.

          Woran liegt das??

          Comment


          • #6
            Sry, hab verplant dass ich natürlich auch die 3 Tabellen in H2 umwandeln muss!!

            Funktioniert jetzt super und die Lösung ist mal wieder simpel. Hab ganz anders gedacht!!

            Vielen Vielen Dank!!!

            Comment

            Working...
            X