Announcement

Collapse
No announcement yet.

SQL Abfrage

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

  • SQL Abfrage

    Hallo

    Ich steh grad vor folgendem Problem:
    Ich hab zwei Tabellen -> Kundendaten, Verträge

    Ich möchte folgendes Resultat:
    KN Kunde aktiv passiv
    1 IGKOM SG 3 2

    Die Tabelle soll mir di Kundennummer (KN), den Namen des Kunden und dann die Anzahl aktiven und passiven Verträge ausgeben.

    Ich kenn SQL noch nicht sehr gut. hab jedoch bereits folgendes hinbekommen:
    SELECT DISTINCT Verträge.KN, Kundendaten.Kunde, Verträge.aktiv
    FROM Kundendaten INNER JOIN Verträge ON Kundendaten.KN = Verträge.KN
    where Verträge.aktiv = -1
    GROUP BY Verträge.KN, Kundendaten.Kunde, Verträge.aktiv


    diese Tabelle zeigt mir jedoch nur die Kunden mit den aktiven Verträge. Was muss ich machen, damit die Passiven ebenfalls in einer separaten Spalte angezeigt werden? Diejenigen Kunden, welche keine aktiven Verträge haben, erscheinen gar nicht in der Liste. Wie kann ich dort unter der Anzahl der aktiven Verträge eine Null anzeigen lassen?

    Vielen Dank für eure Hilfe.

    mfg boundin

  • #2
    wenn ich diesen Code eingebe:
    SELECT DISTINCT Verträge.KN, Kundendaten.Kunde, SUM(Verträge.aktiv=0) AS Passiv, SUM(Verträge.aktiv=-1) AS VAktiv
    FROM Kundendaten INNER JOIN Verträge ON Kundendaten.KN = Verträge.KN
    GROUP BY Verträge.KN, Kundendaten.Kunde, Verträge.aktiv;


    erhalte ich zwar genau das was ich eigentlich will. aber jeweils auf zwei zeilen:

    KN Kunde Passiv Aktiv
    1 IG KOMSG 2 0
    1 IG KOMSG 0 55

    Wie krieb ich das in eine zeile?

    Comment


    • #3
      Müsste so gehen

      [highlight=sql]
      SELECT Verträge.KN, Kundendaten.Kunde, SUM(Verträge.aktiv=0) AS Passiv, SUM(Verträge.aktiv=-1) AS VAktiv
      FROM Kundendaten INNER JOIN Verträge ON Kundendaten.KN = Verträge.KN
      GROUP BY Verträge.KN, Kundendaten.Kunde;
      [/highlight]

      Also ohne Gruppierung nach Aktiv

      Viel Erfolg
      Tino
      Ich habs gleich!
      ... sagte der Programmierer.

      Comment


      • #4
        super

        Vielen Dank

        Comment


        • #5
          ich erhalte beim ausführen jedoch immer minus-zahlen. eigentlich logisch, aber kann ich das irgendwie ändern?

          Comment


          • #6
            Ich glaube du suchst nicht nach der SUM-Funktion sondern nach Count() kann das sein?
            Du möchtest doch die Anzahl zählen oder?

            lg chapster

            Comment


            • #7
              Kein Wunder, wenn du (warum auch immer) aktiv durch "-1" definiert hast. Dann rechne doch das Ergebnis einfach um:
              Code:
              SELECT Verträge.KN, Kundendaten.Kunde, 0 - SUM(Verträge.aktiv=-1) AS VAktiv,
              Aber chapster hat recht.

              Gruß Jürgen

              Comment


              • #8
                jo das stimmt.... aber wenn ich count verwende dann bekomm ich das total aller werte welche in der spalte aktiv stehen....
                jedoch steht in der spalte aktiv entweder der wert -1 oder 0. und ich möchte die summer der werte in spalte aktiv mit -1 und die summe der werte mit 0. ist das so überhaupt möglich?

                ich verwende diese abfrage in access. in der spalte aktiv ist eine checkbox die entweder aktiviert oder deaktiviert werden kann und somit der wert in dieser spalte ja ändern kann.

                Comment


                • #9
                  danke jürgen. das klappt so....

                  access hat die werte für die checkbox so hinterlegt, ich weiss nicht wie ich dies ändern kann.
                  aber funktioniert ja jetzt

                  Comment


                  • #10
                    Für Access und boolesche Werte ist das in der Tat das richtige Vorgehen. Auch im SQL-Wikibooks unter SUM() ist so etwas erläutert. Jürgen

                    PS. Zwei Beiträge kurz hintereinander ist nicht nötig; dafür gibt es den Editieren-Button.

                    Comment

                    Working...
                    X