Announcement

Collapse
No announcement yet.

Im Join ein Case

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

  • Im Join ein Case

    Moinsen,

    ich hab ein kleines Problemchen, bei dem ich im Join eine Case Anweisung habe. Jetzt wollte ich Fragen ob sowas überhaupt zulässig ist 1. und 2. Wenn ja, warum dann OpenOfficeBase Meckert :/
    Hier ein Ausschnitt aus der Query:

    Code:
    					   INNER JOIN Table
    							ON Table.FID = Table2.FID 
    AND 
    (CASE WHEN Table.Point = 0 OR Table.Point = 1 OR Table.Point = 2
    THEN Table.Point = Table2.Point
    ELSE Table.Point = Table2.Point + 2
    END)
    Es kann nur an diesen Ausschnitt liegen, weil es ohne funktionieren würde, also das die Query ausgeführt wird. Ach und Point sind Integer Werte

    Die Fehlermeldung von Base ist: Incorrect syntax near '='

  • #2
    1. Du bist wahrscheinlich im falschen Unterforum. Du weist auf OpenOffice-Base hin; also ist nicht anzunehmen, dass du mit MS-SQL arbeitest, oder? Welche Datenbank benutzt du bei Base?
    2. Zeigt die Fehlermeldung auch die Zeile an? Du hast mehrere Gleichheitszeichen.
    3. In welchem Zusammenhang wird der SQL-Befehl ausgeführt (Base-Makro, Base-Abfrage usw.)? Das spielt zwar eigentlich keine Rolle, kann aber ein Hinweis auf mögliche Fehlerquellen sein.
    4. Versuche einmal, alle ORs sowie WHEN usw. in Klammern zu setzen, auch wenn das nach SQL-Standard eigentlich nicht notwendig wäre. Ich habe wiederholt die Erfahrung gemacht, dass Klammern bei OO-Base die Arbeit erleichtern.

    Gruß Jürgen

    Comment


    • #3
      Neben den bereits erfolgten Anmerkungen und der Frage, welche DB eigentlich angesprochen wird (= was kann die dann ?)
      würde ich aus
      Code:
      					   INNER JOIN Table
      							ON Table.FID = Table2.FID 
      AND 
      (CASE WHEN Table.Point = 0 OR Table.Point = 1 OR Table.Point = 2
      THEN Table.Point = Table2.Point
      ELSE Table.Point = Table2.Point + 2
      END)
      eher
      [highlight=SQL]
      INNER JOIN Table ON Table.FID = Table2.FID
      AND
      (CASE WHEN Table.Point = 0 OR Table.Point = 1 OR Table.Point = 2
      THEN Table.Point
      ELSE Table.Point -2
      END) = Table2.Point
      [/highlight]

      machen. Also den Case Ausdruck (entsprechend umgeformt) komlett auf eine Seite des Vergleichs.
      Gruß, defo

      Comment


      • #4
        Ist eine MSSQL Datenbank, aber ich mach die querys nunmal mit open office base. Danke für die rasche Antwort, werd es gleich morgen testen ob ich zum gewünschten Ergebnis komme.

        Grüße,

        Toni

        Comment


        • #5
          Puh okay das funktioniert jetzt schonmal, aber meine Problemstellung hat sich schon wieder ein klein wenig geändert

          Jetzt sieht das Problem folgendermaßen aus:

          Wenn Table.Point den Wert 0,1,2 hat, dann soll es gleichgesetzt werden mit Table2.Point

          Aber danach soll sich immer die Differenz der Point-Werte um 1 erhöhen

          Hier das Beispiel

          0 =0
          1=1
          2=2
          3=4 unterschied 1
          4=6 unterschied 2
          5=8 unterschied 3
          6=10 unterschied 4
          7=12 unterschied 5

          Kann man da in SQL irgendwie ne Laufvariable oder so etwas einbauen?

          Grüße
          Zuletzt editiert von Toni91; 11.10.2012, 14:29.

          Comment


          • #6
            vielleicht so:
            ...

            (CASE WHEN TABLE.Point = 0 OR TABLE.Point = 1 OR TABLE.Point = 2 THEN TABLE.Point ELSE (TABLE.Point - 1) * 2 END) = Table2.Point
            ...

            bye,
            Helmut

            Comment

            Working...
            X