Announcement

Collapse
No announcement yet.

Statement-Fehler - Join

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

  • Statement-Fehler - Join

    Hallo

    ich habe folgendes Skript was auch wunderbar funktioniert.
    Es hat jedoch einen Schönheitsfehler.
    In meiner Tabelle Barticles stehen alle Artikel drin mit einem Kennzeichen '2SMSA'. In meiner Lagerbestandstabelle stehen meine Bestände.
    Leider ist es so, das wenn in meiner Lagerbestandstabelle der Lagerbestand des Artikel auf Null geht, so verschwindet er aus meiner Tabelle. Leider auch im Ergebniss meines Skriptes. Ich bekomme nicht mit wenn der Artikel auf Null geht
    Ich möchte also gerne auch die Artikel sehen die keinen Datensatz mehr in der Wbalances haben.

    Vielen Dank im Voraus.
    C.Klemm

    [highlight=sql]
    SELECT TOP 100 PERCENT
    dbo.WARTPLANTS.art_no,
    dbo.barticles.desc_1,
    SUM(dbo.WBALANCES.stock_bal) AS menge,
    dbo.wartplants.reo_point AS bestellpunkt,
    dbo.wartplants.reo_qty AS bestellmenge
    FROM
    dbo.WBALANCES
    left outer JOIN dbo.WARTPLANTS
    left outer JOIN dbo.BARTICLES ON
    dbo.BARTICLES.art_no = dbo.WARTPLANTS.art_no ON
    dbo.WARTPLANTS.art_no = dbo.WBALANCES.art_no
    where dbo.barticles.stat_CD_5 = '2SMA' AND dbo.WARTPLANTS.plant_no = '1'
    GROUP BY
    dbo.WARTPLANTS.art_no,
    dbo.barticles.desc_1,
    dbo.WARTPLANTS.plant_no,
    dbo.WARTPLANTS.reo_point,
    dbo.WARTPLANTS.reo_qty,
    dbo.BARTICLES.stat_cd_5,
    dbo.wbalances.wh_no
    HAVING dbo.WBALANCES.wh_no = '1110' and sum(dbo.wbalances.stock_bal) <= dbo.WARTPLANTS.reo_point
    [/highlight]

  • #2
    Hallo,

    dazu mußt du die zusätzlichen Bedingungen (dbo.barticles.stat_CD_5 = '2SMA' AND dbo.WARTPLANTS.plant_no = '1') mit in der jeweiligen JOIN-Bedingung statt in der Where-Klausel formulieren. Ansonsten "zerstören" diese Bedingungen die OUTER JOINs.

    Anmerkung: In der HAVING-Klausel haben nur Prüfungen auf aggregierte Werte etwas zu suchen. Die Bedingung dbo.WBALANCES.wh_no = '1110' gehört stattdessen in die WHERE-Klausel.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo

      vielen Dank für den Tipp.
      Leider bekomme ich überhaupt nicht auf den Schirm was du gemeint hast mit
      "dazu mußt du die zusätzlichen Bedingungen (dbo.barticles.stat_CD_5 = '2SMA' AND dbo.WARTPLANTS.plant_no = '1') mit in der jeweiligen JOIN-Bedingung statt in der Where-Klausel formulieren"

      Soll hinter dem join ein select?
      Gruß
      Conny

      Comment


      • #4
        so ists gemeint[HIGHLIGHT=SQL]FROM dbo.WBALANCES AS Bal
        LEFT JOIN dbo.WARTPLANTS AS War ON War.art_no = Bal.art_no
        AND War.plant_no = '1')
        LEFT JOIN dbo.BARTICLES AS Art ON Art.art_no = War.art_no
        AND Bar.stat_CD_5 = '2SMA'[/HIGHLIGHT]

        Comment


        • #5
          Hallo

          ich habe den Code mal direkt übernommen und bekommen prompt den nächsten Fehler. Egal was ich auch probiere es will einfach nicht.

          Meldung 102, Ebene 15, Status 1, Zeile 6
          Falsche Syntax in der Nähe von 'dbo'.


          [highlight=sql]
          SELECT TOP 100 PERCENT
          dbo.WARTPLANTS.art_no,
          dbo.barticles.desc_1,
          SUM(dbo.WBALANCES.stock_bal) AS menge,
          dbo.wartplants.reo_point AS bestellpunkt
          dbo.wartplants.reo_qty AS bestellmenge
          FROM dbo.WBALANCES as BAL
          LEFT JOIN dbo.WARTPLANTS AS War ON
          War.art_no = Bal.art_no AND War.plant_no = '1'
          LEFT JOIN dbo.BARTICLES AS Art ON
          Art.art_no = War.art_no AND Bal.stat_CD_5 = '2SMA'
          GROUP BY
          dbo.WARTPLANTS.art_no,
          dbo.barticles.desc_1,
          dbo.WARTPLANTS.plant_no,
          dbo.WARTPLANTS.reo_point,
          dbo.WARTPLANTS.reo_qty,
          dbo.BARTICLES.stat_cd_5,
          dbo.wbalances.wh_no
          HAVING sum(dbo.wbalances.stock_bal) <= dbo.WARTPLANTS.reo_point
          [/highlight]

          Comment


          • #6
            Originally posted by cklemm View Post
            Meldung 102, Ebene 15, Status 1, Zeile 6
            Falsche Syntax in der Nähe von 'dbo'.
            sagt aus das in der 5 Zeile das Komma fehlt...

            und dann, warum Top 100 Percent ??
            und warum gruppierst, du nach mehr Spalten, als Du anzeigen willst?
            und Aliase erleichtern das Lesen und Schreiben

            [highlight=sql]
            SELECT War.art_no,
            Art.desc_1,
            SUM(Bal.stock_bal) AS menge,
            war.reo_point AS bestellpunkt,
            war.reo_qty AS bestellmenge
            FROM dbo.WBALANCES as BAL
            LEFT JOIN dbo.WARTPLANTS AS War ON War.art_no = Bal.art_no
            AND War.plant_no = '1'
            LEFT JOIN dbo.BARTICLES AS Art ON Art.art_no = War.art_no
            AND Bal.stat_CD_5 = '2SMA'
            GROUP BY war.art_no,
            Art.desc_1,
            war.reo_point,
            war.reo_qty
            HAVING sum(bal.stock_bal) <= war.reo_point
            [/highlight]

            Comment

            Working...
            X