Announcement

Collapse
No announcement yet.

Wie kann ich eine Schleife draus bilden?

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

  • Wie kann ich eine Schleife draus bilden?

    Hallo,

    suche Hilfe bei einer SQL-Abfrage, da ich leider nicht weiterkomme

    Habe hier eine Abfrage, die bereits eine Schleife beinhaltet und auch genau so funktioniert. Bei dieser Abfrage wird geprüft, ob ein Artikelname (cName) vorhanden ist, wenn ja soll Menge und Einheit ausgegeben werden, was auch klappt:
    Code:
    JTL_DirectQuery ("DECLARE @cName VARCHAR(1024)
    SELECT @cName = COALESCE(@cName  + '¶', '') + cast(ISNULL(tStueckliste.fAnzahl, 0) AS varchar)  + ' ' + ISNULL(tArt2.cEinheit,'') from tArtikel
    LEFT JOIN tStueckliste ON tStueckliste.kStueckliste = tArtikel.kStueckliste
    LEFT JOIN tArtikel AS tArt2 ON tArt2.kArtikel = tStueckliste.kArtikel
    WHERE tArtikel.cArtNr='"+Positionen.Artikelnummer+"'
    SELECT cName = @cName")


    Nun möchte ich noch Lagerort auslesen lassen, dies klappt auch soweit, NUR liest er mir die erste Datenzeile aus, weil die Schleife fehlt. Schaffe es leider nicht, diese umzubauen:
    Code:
    JTL_DirectQuery ("SELECT (tl.cName + '-' + lo.cName) AS Lagerort FROM tArtikel a 
    LEFT JOIN tStueckliste ON tStueckliste.kStueckliste = a.kStueckliste 
    LEFT JOIN tArtikel AS tArt2 ON tArt2.kArtikel = tStueckliste.kArtikel 
    LEFT OUTER JOIN tArtikelLagerOrt l ON (l.kArtikel  = tArt2.kArtikel) 
    LEFT OUTER JOIN tlagerort lo ON (lo.kLagerOrt = l.kLagerOrt) 
    LEFT OUTER JOIN tlager tl ON (tl.kLager = lo.kLager)   
    WHERE a.cArtNr ='"+Positionen.Artikelnummer+"'")
    Bedanke mich vielmals vorab!

  • #2
    Hallo,
    Originally posted by scax View Post
    ...NUR liest er mir die erste Datenzeile aus, weil die Schleife fehlt. Schaffe es leider nicht, diese umzubauen:
    SQL kennt defacto keine "Schleifen"! Was willst du erreichen?

    Bitte beachten: Formatierung von SQL in Beiträgen

    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
      OK, dann hab ich mich falsch ausgedrückt

      Die Funktion "COALESCE" liest ja alle Zeilen aus, die eine Bedingung erfüllen, oder? Habe versucht im 2. SQL-Befehl das einzubinden, ohne Erfolg ... mir fehlt die Erfahrung!

      Wie gesagt, wird geprüft ob es ein Stücklistenartikel ist, wenn ja, sollen alle Artikel der Stückliste und jeweiligem Lagerort ausgelesen werden. Die diese Art "Schleife" fehlt, wird nur Zeile eins ausgegeben, weitere Strings nicht addiert.

      ... kannst du hier helfen?

      Comment


      • #4
        Hi,

        mit Deiner Abfrage findest Du nur den Artikel, dessen Nummer=Positionen.Artikelnummer ist.
        Sieht nach einer Programmvariablen aus, die einen bestimmten Wert hat. Also lasse mal Deine Where Bedingung weg.
        Warum schreibst Du mal "Left Join" und mal "Left Outer Join" ? Das ist nämlich dasselbe.
        Wenn ich das Ziel Deiner Abfrage halbwegs richtig verstehe, solltest Du das "LEFT" bei der Stückliste ganz wegglassen und nur JOIN schreiben.

        Gruß
        docendo discimus

        Comment


        • #5
          Nur als kurzer Hinweis:
          COALESCE liefert aus den in der Klammer angegebenen Werten (die auch mehr als zwei sein können) den ersten, der nicht NULL ist. Mit einer Schleife hat das gar nichts zu tun.

          bye,
          Helmut

          Comment


          • #6
            die stückliste ist so aufgebaut, in der SQL.DB hat ein Artikel eine Art-Nr hinter dieser sind auf einer "Stückliste" weitere hinzugefügt.

            daher wird mit dem SQL abgefragt, OB es ein Stücklistenartikel ist (also ob Artikel auf der Stückliste vorhanden sind) und gibt dann ALLE Positionen aus, die auf diesem Artikel mit der Art-Nr gesetzt sind (Positionen.Artikelnummer).

            Wie gesagt, die Abfrage klappt ja, aber NUR für die erste Datenzeile und weis nicht wie ich die weiteren von der Liste auslesen lassen kann. Bei Einheit und Menge klappt es, hier ist wohl COALESCE dafür gut, den es bei Lagerort halt nicht gibt

            kann mir gut vorstellen, dass es etwas wirr ist, ich versuche mein bestes als SQL-Laie

            Comment

            Working...
            X