MSSQL-Abfrage (INNER JOIN & Group By)

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von KabelMops.

    MSSQL-Abfrage (INNER JOIN & Group By)

    Hallo zusammen,

    stehe mit einer SQL-Abfrage gerade irgendwie aufm Schlauch.
    Ich hoffe Ihr könnt mir dabei vielleicht weiterhelfen?

    Zum besseren Verständnis habe ich den Aufbau der Tabellen vereinfacht in ein Bild dargestellt.
    Leider bekomme ich es mit folgender Abfrage aber nicht so recht hin.

    SQL-Abfrage

    1. select Bezeichnung, sum(Anzahl) from tabSorten INNER JOIN tabLager on tabSorten.ID = tabLager.tabSortenID group by tabSorten.Bezeichnung
    Bilder
    • Abfrage.png

      7,33 kB, 416×284, 144 mal angesehen
    Ahoi,

    sind die Bezeichnungen deiner Sorten hier so wichtig ?
    Du hast die ID ja und kannst diese ebenfalls Gruppieren, somit sparst du dir den Join.

    Edit: für eine sinnvolle Ansicht wären die Bezeichnungen sicher ganz nützlich ;)

    Hast du es denn schonmal mit einem DISTINCT, statt einem ORDER BY versucht ?
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Nein hab ich noch nicht,

    kannte ich aber auch noch nicht. Anhand von Beipielen soll man das in der Form von

    SQL-Abfrage

    1. COUNT(DISTINCT Anzahl)
    nutzen. Ist das so richtig?

    SQL-Abfrage

    1. select Bezeichnung, sum(DISTINCT Anzahl) from tabSorten INNER JOIN tabLager on tabSorten.ID = tabLager.tabSortenID


    Ich bekomme dann nämlich dann folgende Fehlermeldung:

    Syntaxfehler (fehlender Operator) in Abfrageausdruck 'count(DISTINCT Anzahl)'
    Ich habe deine Datenbank nachgestellt inkl den gleichen Werten.
    Habe dein SQL Statement 1:1 übernommen und bei mir es korrekt angezeigt
    Bezeichnung(No column name)
    Äpfel8
    Birnen1


    Was genau also funktioniert nicht?

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    • mir scheint, das Grouping kann man weglassen.
    • Ausserdem würde ich das schon vonne DB her nicht zulassen, dass im Lager 2 Datensätze auf dieselbe Sorte verweisen.
      Ich würde im Lager nur einen Datensatz haben wollen, mit 8 Äpfeln und gut.
      Anzahl der Äppel würde nicht erhöht durch weitere Appel-Datensätze, sondern durch Erhöhung der Anzahl des einzigen AppelDatensatz.
    unnötiges Vollzitat entfernt
    - ErfinderDesRades


    Da ich mich in dem Beispiel nur auf die wesentlichen Datenfelder konzentriert habe sah das auf den ersten Blick vielleicht etwas unsinnig aus.
    In der zweiten Tabelle (Lager) stehen natürlich noch weitere relevante Datensätze.
    Ich habe die Übersicht noch einmal überarbeitet um den Sinn vielleicht etwas besser darzustellen.

    In meinem Beispielt sieht die Abfrage jetzt folgendermaßen aus:

    SQL-Abfrage

    1. select ProduktID, Hersteller, Produkt, sum(Anzahl) as Anzahl, MIN(MHD) as MHD from tabProdukt INNER JOIN tabLager on tabProdukt.ID = tabLager.ProduktID group by ProduktID, Hersteller, Produkt

    Lasse ich das Grouping weg, wird mir garnichts mehr ausgegeben.
    Bilder
    • Abfrage2.png

      16,52 kB, 733×289, 118 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()