Announcement

Collapse
No announcement yet.

Abfrage von zwei Tabellen für Inventur-Programm

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

  • Abfrage von zwei Tabellen für Inventur-Programm

    Hallo liebe Entwickler-Gemeinde!
    Ich bin schon seit einiger Zeit über ein Problem mit einer Abfrage am grübeln und würde mich freuen, wenn ihr mir da helfen könntet.

    Zu meinem Problem:
    Ich programmiere z.Zt. ein kleines Inventur-Programm in VB. Und dafür muss ich nun eine Abfrage erstellen, die mir idealerweise den sich aktuell im Bestand befindlichen Güter ausgibt.
    Dazu habe ich zwei Tabellen.

    -die Tabelle ArtikelInfos
    -> mit den Feldern:
    -ArtikelNummer2
    -ArtikelName
    -Preis


    und die Tabelle Bestand
    -> mit den Feldern:
    -ArtikelNummer1
    -Anzahl

    Die Abfrage sollte nun als Ergebnis eine der beiden Artikelnummern ( die sind ja beide gleich und für die where-Klausel geeignet), den Artikelnamen,den Preis und die Summe des Feldes Anzahl liefern.

    Ich habe schon eine Abfrage erstellt, die mir allerdings nur die Felder Preis und die Summe der Anzahl ausliefert.

    Code:
    select ArtikelInfos.ArtikelName,SUM(Bestand.Anzahl)as Anzahl,ArtikelInfos.Preis from ArtikelInfos,Bestand where ArtikelInfos.ArtikelNummer2=Bestand.ArtikelNummer1 group by ArtikelInfos.ArtikelPreis
    Ich würde mich sehr über jede Hilfe freuen

  • #2
    [HIGHLIGHT="SQL"]SELECT A.ArtikelName
    , SUM(B.Anzahl)as Anzahl
    , A.Preis
    FROM ArtikelInfos AS A
    JOIN Bestand AS B ON A.ArtikelNummer2 = B.ArtikelNummer1
    GROUP BY A.ArtikelPreis
    , A.ArtikelName[/HIGHLIGHT]
    Formatierung von SQL in Beiträgen

    Comment


    • #3
      Ersteinmal Danke für die Antwort!

      Allerdings meckert er nun, dass dort ein Fehler in der FROM-Klausel wäre.
      Leider reicht mein begrenztes SQL Wissen auch nicht dafür diesen Fehler zu finden.

      Comment


      • #4
        Originally posted by JulianHi View Post
        Allerdings meckert er nun, dass dort ein Fehler in der FROM-Klausel wäre.
        Leider reicht mein begrenztes SQL Wissen auch nicht dafür diesen Fehler zu finden.
        man könnte die Fehlermeldung posten...

        Comment


        • #5
          ... und verraten wer "er" ist, also welches DBMS verwendet wird...
          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


          • #6
            Originally posted by JulianHi View Post
            ...Die Abfrage sollte nun als Ergebnis eine der beiden Artikelnummern ( die sind ja beide gleich und für die where-Klausel geeignet), den Artikelnamen,den Preis und die Summe des Feldes Anzahl liefern.
            Ein paar mehr Infos wären schon nicht schlecht. Gibt es denn in Bestand tatsächlich mehrere Anzahl zu einer ArtikelNummer1 oder ist ArtikelNummer1 mglws. eindeutig?
            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


            • #7
              Ich vermute mal, dass der Fehler aus dem kleinen Tipp- oder Copy-Paste-Fehler im GROUP kommt. Richtigerweise müsste es heißen:
              [HIGHLIGHT="SQL"]SELECT A.ArtikelName
              , SUM(B.Anzahl)as Anzahl
              , A.Preis
              FROM ArtikelInfos AS A
              JOIN Bestand AS B ON A.ArtikelNummer2 = B.ArtikelNummer1
              GROUP BY A.Preis
              , A.ArtikelName[/HIGHLIGHT]

              Comment


              • #8
                Originally posted by Falk Prüfer View Post
                Ein paar mehr Infos wären schon nicht schlecht. Gibt es denn in Bestand tatsächlich mehrere Anzahl zu einer ArtikelNummer1 oder ist ArtikelNummer1 mglws. eindeutig?
                Also Bestand ist als die Tabelle gedacht, mit der der Benutzer durch sein Lager "geht" und dann die Sachen einträgt. Also dann find er vielleicht gerade mal in irgendeinem Regal den Artikel mit der ArtikelNummer 5 und davon sind in dem Regal 5 Stück. Dann geht er weiter und findet den Artikel mit der ArtNr 10 und davon sind in dem Regal 20 Stück. Jetzt geht er zu einem anderen Regal und findet dort wieder Artikel mit der ArtNr 5 und davon nochmal 15 Stück.
                Zum Schluss würde die Tabelle "Bestand" dann so aussehen:

                Code:
                ArtikelNummer1      Anzahl
                     5               5
                     10              20
                     5               15
                Somit ist in der Tabelle "Bestand" das Feld ArtikelNummer1 nicht eindeutig.
                Anders ist das in der Tabelle "ArtikelInfos". Da sind praktisch die Stammdaten drin, d.h. also die Artikelliste, in der logischerweise die ArtikelNummer2 eindeutig ist.

                Und an dem "Fehler" in der GROUP-Klausel liegt es auch nicht, da ich den schon berichtigt habe.

                Als Fehler bekomm ich nur, dass in der From-Klausel ein Fehler ist, da ich das Programm wie gesagt mit VisualBasic programmiere und ich den Datenbankzugriff in einen Try/Catch Block gepackt habe, der mir die exception-Meldung in einer Msg-Box ausgibt.

                Ich bin auch für jede weitere Hilfe sehr dankbar.

                Comment


                • #9
                  Originally posted by JulianHi View Post
                  ...Als Fehler bekomm ich nur, dass in der From-Klausel ein Fehler ist, da ich das Programm wie gesagt mit VisualBasic programmiere und ich den Datenbankzugriff in einen Try/Catch Block gepackt habe, der mir die exception-Meldung in einer Msg-Box ausgibt.
                  Ist es denn so schwer die EXAKTE Fehlermeldung hier zu posten und das DBMS zu benennen? Syntaktisch ist das Beispiel OK.

                  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


                  • #10
                    Hallo!

                    Nein es ist nicht schwer, die Fehlermeldung zu posten, wie du auch an meinem letzten Beitrag sehen könntest, der besagt, dass ich nur die exception-Meldung ausgeworfen bekomme. Und die ist ganz einfach: "Syntaxfehler in FROM-Klausel." Und das ist die exakte Fehlermeldung. Mehr gibt VisualStudio durch die excpetion-Meldung nicht aus.

                    [highlight=SQL]SELECT ArtikelInfos.Name,
                    SUM(Bestand.Anzahl) AS Anzahl,
                    ArtikelInfos.Preis
                    FROM ArtikelInfos AS A
                    JOIN Bestand AS B ON A.ArtikelNummer2 = B.ArtikelNummer1
                    GROUP BY ArtikelInfos.Preis,ArtikelInfos.Name[/highlight]

                    Mein DBMS ist Mircrosoft Access.

                    Gruß Julian

                    Comment


                    • #11
                      Originally posted by JulianHi View Post
                      Mein DBMS ist Mircrosoft Access.
                      Also erstmal sträubt sich bei mir alles, wenn ich lese/höre, dass Microsoft Access verwendet wird. Und wenn es dann noch als DBMS bezeichnet wird, dreht sich mir fast der Magen um. Verwende lieber MySQL.

                      Naja, wie dem auch sei. Probier es mal so, dass du bei den Tabellen das AS weglässt. Also so:

                      [highlight=SQL]SELECT ArtikelInfos.Name,
                      SUM(Bestand.Anzahl) AS Anzahl,
                      ArtikelInfos.Preis
                      FROM ArtikelInfos A
                      JOIN Bestand B ON A.ArtikelNummer2 = B.ArtikelNummer1
                      GROUP BY ArtikelInfos.Preis, ArtikelInfos.Name[/highlight]

                      Comment


                      • #12
                        Originally posted by JulianHi View Post
                        Hallo!


                        [highlight=SQL]SELECT ArtikelInfos.Name,
                        SUM(Bestand.Anzahl) AS Anzahl,
                        ArtikelInfos.Preis
                        FROM ArtikelInfos AS A
                        JOIN Bestand AS B ON A.ArtikelNummer2 = B.ArtikelNummer1
                        GROUP BY ArtikelInfos.Preis,ArtikelInfos.Name[/highlight]

                        Mein DBMS ist Mircrosoft Access.

                        Gruß Julian
                        Wenn man Aliase wie "A"verwendet, muss man diese Aliase auch anstatt der ursprünglichen Tabellennamen benutzen...
                        (man kann Aliase als auch weglassen Tabellennamen weglassen, solange die aller angezogenen Spaltennamen eindeutig sind)

                        [HIGHLIGHT="SQL"]SELECT A.ArtikelName
                        , SUM(B.Anzahl) AS Anzahl
                        , A.Preis
                        FROM ArtikelInfos AS A
                        JOIN Bestand AS B ON (A.ArtikelNummer2 = B.ArtikelNummer1)
                        GROUP BY A.Preis
                        , A.ArtikelName[/HIGHLIGHT]
                        und MS-Access legt möglicherweise Wert auf Klammerungder JOIN-Bedingung

                        Comment


                        • #13
                          Hallo!
                          Danke für die vielen weiteren Vorschläge! Leider bekomme ich, auch nach durchprobieren aller Lösungswege, immer noch die selbe Fehlermeldung, wie zuvor beschrieben.
                          Hier ist meine aktuelle Abfrage:
                          [highlight=sql] select A.Name,SUM(B.Anzahl) AS Anzahl,A.Preis
                          FROM ArtikelInfos A
                          JOIN Bestand B ON (A.ArtikelNummer2 = B.ArtikelNummer1)
                          GROUP BY A.Preis,A.Name [/highlight]

                          Ich denke mal, dass die Abfrage von der Syntax her richtig ist.
                          Vllt sollte ich mich mal an die VB-Ecke hier im Forum wenden, ob die einen Rat weiß.
                          Aber trotzdem bin ich für weitere Vorschläge offen und bedanke mich schonmal im voraus!

                          Comment


                          • #14
                            Bin mir nicht sicher, ob Access einen 'reinen' JOIN kennt, versuchs mal mit einem INNER JOIN

                            [highlight=SQL]
                            SELECT A.Name,SUM(B.Anzahl) AS Anzahl,A.Preis
                            FROM ArtikelInfos A
                            INNER JOIN Bestand B ON (A.ArtikelNummer2 = B.ArtikelNummer1)
                            GROUP BY A.Preis,A.Name
                            [/highlight]

                            Wobei der INNER Join nur die Artikel anzeigen wird, die auch Bestand ´haben. Alternativ zeigt der LEFT JOIN alle Artikel + die bestände von denen mit Bestand / Zählmengen

                            Viele Grüße, viel Erfolg
                            Tino

                            P.S. Access bringt diesen lapidaren übrigens Fehler auch, wenn 'nur' ein Schreibfehler bei den Tabellennamen oder gejointen Feldnamen vorliegt.
                            Man würde hier vielleicht eine zielführendere Meldung erwarten.
                            A.Artikelnummer2 = B.Artikelnummer1 wäre für mich so ein 'Wackelkandidat' für solchen Fehler
                            Ich habs gleich!
                            ... sagte der Programmierer.

                            Comment


                            • #15
                              Hey!
                              Vielen Dank für die Hilfe!
                              Es lag an dem join, denn anscheinend kennt Access, wie von dir vermutet, den "reinen" join Befehl nicht.
                              Hab es jetzt gegen ein INNER JOIN ausgetauscht und siehe da, es funktioniert einwandfrei!

                              Aber ich habe mir den Ratschlag einiger zu Herzen genommen, und werde das Projekt wohl in nächster Zeit auf MySQL umstellen

                              Vielen Dank an alle für die Hilfe!

                              Und schöne Grüße!

                              Comment

                              Working...
                              X