Announcement

Collapse
No announcement yet.

SQl Abfrage

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

  • SQl Abfrage

    Hallo miteinander,
    ich bin ein neuer Mitglied und hoffe Ihr könnt mir helfen.

    Folgende Tabelle (ohne Index):

    Spalte1 Spalte2 Spalte3
    ----------------------------
    Müller Thomas ...
    Schulze Florian ...
    Franz Stefan ...
    Müller Sarah ...
    Meier Andreas ...
    Schulze Florian ...
    Müller Tim ...
    Müller Tim ...

    Das Ergebnis soll sein (Name/Anzahl unterschield. Vornamen):
    Spalte1 Spalte2
    ------------------
    Müller 3
    Schulze 1
    Franz 1
    Meier 1

    Arbeite in ACCESS2003/2007 mit Standard-SQL.

    SELECT Spalte1, Spalte2
    FROM Tabelle
    WHERE Spalte1 In (SELECT Spalte1, Spalte2
    FROM Tabelle
    GROUP BY Spalte1, Spalte2
    HAVING (((Count(*))>0));

    funktionier leider nicht (Fehlermeldung: kein EXISTS vorhanden)

    nur
    SELECT Spalte1, Spalte2
    FROM Tabelle
    GROUP BY Spalte1, Spalte2
    HAVING (((Count(*))>0));

    oder

    SELECT Spalte1, Spalte2, COUNT(*) AS Anzahl
    FROM Tabelle
    GROUP BY Spalte1, Spalte2
    HAVING (((Count(*))>0));

    Kein Problem!!!

    Sitze seit 2 Tagen daran (sollte doch einfach sein?) Kann mir hier jemand helfen?
    Vielen vielen Dank
    Zuletzt editiert von sql-beginner; 07.03.2008, 07:03. Reason: Korrektur
    Immer freundlich
    und
    die MS-Hilfe ist sogar nützlich!

  • #2
    Hallo,

    ich bin nicht mit einer Abfrage hingekommen, musste also eine Zwischen-View erstellen, aber das sollte ja nicht weiter stören. Allerdings ist mir das gewünschte Ergebnis nicht ganz klar, weil nach meiner Ansicht nicht ganz konsistent?! Warum steht bei Schulz richtig eine 1, wobei die Kombination Nachname-Vorname ja auch nur einmal existiert (wenn auch in zwei Datensätzen), bei Franz steht dafür eine 0 obwohl ja offensichtlich immer mindestens eine Kombination existieren muss. Aber bitteschön:
    Code:
    Die abgespeicherte TempView:
    
    SELECT test.spalte1, test.spalte2, Count(test.spalte2) AS Anz
    FROM test
    GROUP BY test.spalte1, test.spalte2;
    
    Die ErgebnisView:
    
    SELECT TempView.spalte1, iif (Sum(TempView.Anz) = 1, 0, Count(TempView.spalte1)) AS Anzahlvonspalte1
    FROM TempView
    GROUP BY TempView.spalte1;
    Viele Grüße
    Olaf
    Zuletzt editiert von Olaf Steffan; 06.03.2008, 22:22.

    Comment


    • #3
      Code:
      
      SELECT TempView.spalte1
         , CASE WHEN (Sum(TempView.Anz) = 1  T
                     THEN 0 
      ELSE Count(TempView.spalte1)) AS Anzahlvonspalte1
      FROM (SELECT test.spalte1, test.spalte2, Count(test.spalte2) AS Anz
      FROM test
      GROUP BY test.spalte1, test.spalte2
      ) AS TempView
      GROUP BY TempView.spalte1;
      Viele Grüße
      Olaf[/QUOTE]

      Comment


      • #4
        So könnte das in einem Select gehen...

        Code:
        SELECT TempView.spalte1
           , CASE WHEN (Sum(TempView.Anz) = 1  T
                       THEN 0 
                       ELSE Count(TempView.spalte1)
             END   AS Anzahlvonspalte1
        FROM (SELECT test.spalte1
                              , test.spalte2
                             , Count(test.spalte2) AS Anz
                   FROM test
                  GROUP BY test.spalte1, test.spalte2
                  ) AS TempView
        GROUP BY TempView.spalte1;

        Comment


        • #5
          Hallo Olaf, Hallo Ebis,
          Olaf, du hast natürlich recht. Bei Franz und Meier steht die 1.

          Wenn ich den Code von Ebis bei Access eingebe, so erscheint die Fehlermeldung:
          syntaxfehler (fehlender operator) in Abfrageausdruck
          'CASE WHEN (Sum(TempView.Anz) = 1 T
          THEN 0
          ELSE Count(TempView.spalte1) ...

          Ist aber kein Problem. Das Abfangen, ob Ergebnisse vorliegen, geschieht wo anders. Habe den Code ein wenig geändert (HAVING ist neu):

          mit:
          SELECT TempView.spalte1, Count(TempView.spalte1) AS Anzahlvonspalte1
          FROM (SELECT test.spalte1, test.spalte2, count(test.spalte2) AS Anz
          FROM test GROUP BY test.spalte1, test.spalte2) AS TempView
          GROUP BY TempView.spalte1
          HAVING (((Count(TempView.spalte1)>1)));

          scheint es zu funktionieren.

          Vielen vielen Dank!!!
          Zuletzt editiert von sql-beginner; 07.03.2008, 07:11.
          Immer freundlich
          und
          die MS-Hilfe ist sogar nützlich!

          Comment

          Working...
          X