Announcement

Collapse
No announcement yet.

Probleme bei einer Abfrage mit einer Spalte COUNT-Differenz

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

  • Probleme bei einer Abfrage mit einer Spalte COUNT-Differenz

    Gegeben habe ich drei Tabellen:
    auszugsweise:

    Table Kategorie:
    Kat_Id;
    Bezeichnung;

    Table Artikel:
    Artikel_ID;
    Kat_ID;
    Bezeichnung;

    Table Einzelartikel:
    Einzel_ID;
    Artikel_ID;
    Ausleihbar (bool);
    Verliehen (bool);

    Wie ich die SELECT Anweisung formulieren kann, um einfach nur die

    Kategorie.Bezeichnung AS Kategorie, Artikel.Bezeichnung, Einzelartikel.Artikel_ID

    ist klar, aber wie kann ich es hinbekommen, dass dieser SELECT noch um eine weitere Spalte ergänzt wird, in der die COUNT's für den jeweiligen Artikel für Ausleihbar = 1 (true) und Verliehen = 0 (false) subtrahiert werden.

    Das Ergebnis dieser Spalte soll mir die Anzahl eines Artikels ausgeben, die zum Ausleihen zur Verfügung stehen.

    Bin erst ein Beginner in SQL und habe jetzt schon Stunden herumexperimentiert, aber bin zu keinem Ergebnis gekommen.
    Wäre für ein paar Hinweise mehr als dankbar.

    Gruß Wolf

  • #2
    Hallo,
    Originally posted by Wolf13 View Post
    ...aber wie kann ich es hinbekommen, dass dieser SELECT noch um eine weitere Spalte ergänzt wird, in der die COUNT's für den jeweiligen Artikel für Ausleihbar = 1 (true) und Verliehen = 0 (false) subtrahiert werden.
    Eben genau so, indem du die Counts (oder besser die Summen) subtrahierst. Je nach Möglichkeiten des DBMS musst du noch eine Explizite Umwandlung der Booleaschen Werte vornehmen.
    Originally posted by Wolf13 View Post
    ...Das Ergebnis dieser Spalte soll mir die Anzahl eines Artikels ausgeben, die zum Ausleihen zur Verfügung stehen.
    Das ist aber nun was ganz Anderes!? Die zum Ausleihen verfügbaren Artikel sind doch einfach nur die mit Ausleihbar = 1 (true) oder? Ansonsten macht dein Datenmodell keinen Sinn. Für mich kann es zwar Artikel geben, die nicht verliehen aber trotzdem (weil z.B. kaputt) nicht ausleihbar sind, aber es kann keine geben, die verliehen und trotzdem ausleihbar sind.
    Hier solltest du die möglichen Zustände mal genauer definieren und ggfs. dein Datenmodell überdenken.

    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
      Danke Falk, für den Tip und ich werde es mal mit dem summieren versuchen.

      Zu 2. bin ich etwas irritiert, da ich es mir so gedacht habe, dass ich Ausleihbar genau aus dem von dir genannten Grund eingeführt habe (zB. Reparatur), aber wenn ein Artikel schon verliehen ist, steht er auch nicht zum weiteren Verleih zur Verfügung, daher die Differenz.
      Falls das keinen Sinn macht, lasse ich mich gerne eines Besseren belehren, da ich noch einiges zu lernen habe.

      Gruß Wolf

      Comment


      • #4
        Hallo Wolf,

        wenn das Feld "Ausleihbar" ein reines Statusfeld ist, welches anzeigt ob ein Artikel prinzipiell zur Ausleihe zur Verfügung steht, dann brauchst du trotzdem keine Differenzbildung. Du kannst dann deine Abfrage einfach auf die "Ausleihbaren" einschränken und zählst dort die Nichtausgeliehenen.

        [highlight=sql]
        select sum(case when Verliehen then 0 else 1 end) anz_ausleihbar
        where Ausleihbar = true
        [/highlight]

        Anmerkung: Ich würde auf die Verwendung nativer Boolscher Datentypen verzichten und stattdessen einfache Integer (0, 1) verwenden. Das macht sich einfacher, wenn man doch mal rechnen muss und ist im Endeffekt auch "kompatibler".

        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

        Working...
        X