tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
263
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    dansch dansch ist offline Grünschnabel
    Registriert seit
    Aug 2010
    Beiträge
    3
    Hallo

    Erstmal muss ich sagen das mein SQL Wissen (noch) in den Kinderschuhen steckt.
    Also ich bin in Sachen Wissenserweiterung unterwegs

    Zu meinem Problem:

    In einer Tabelle ist eingetragen welcher Mitarbeiter sich in welcher unserer Niederlassungen angemeldet hat.

    Der Großteil meldet sich nur in einer Niederlassung an.
    Ich möchte nun Wissen wie viel Mitarbeiter sich in Haus 1 und Haus 2 anmelden.

    Es sollen also nur die Mitarbeiter gezählt werden die sich sowohl in Haus 1 als auch in Haus 2 anmelden.

    Also die Tabelle (MS-SQL) sieht folgendermaßen aus (gekürzte Version):

    MitarbeiterID, Haus, Datum
    10 1 15.01.2010
    15 2 15.01.2010
    15 1 16.01.2010
    13 3 15.01.2010
    10 1 16.01.2010
    15 2 17.01.2010

    Mit:

    SELECT MitarbeiterID, Haus, Uhrzeit
    FROM Anmeldung
    WHERE (Haus = '1') or (Haus=’2’)

    bekomme ich ja alle Anmeldungen aus beiden Häusern.
    Welche Befehle muss ich nutzen damit nur die MitarbeiterID ausgegeben wird, die
    sich in beiden Häusern anmeldet?

    Ich hoffe ich hab mich einigermaßen Verständlich ausgedrückt und habe alle nötigen Infos dazugeschrieben.
    Diese Abfrage ist übrigens nur für mich zu lernen…sie wird nicht irgendwo produktiv
    zum Einsatz kommen!

    Danke
    Gruß
    Dansch
     

  2. #2
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.774
    Blog-Einträge
    5
    Hallo Dansch,

    eine einfache Möglichkeit wäre die Verwendung von INTERSECT:
    Code sql:
    1
    2
    3
    
    SELECT MitarbeiterID FROM Anmeldung WHERE Haus = '1'
    INTERSECT
    SELECT MitarbeiterID FROM Anmeldung WHERE Haus = '2'

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  3. #3
    dansch dansch ist offline Grünschnabel
    Registriert seit
    Aug 2010
    Beiträge
    3
    Hallo

    Erstmal vielen Dank für deine Antwort...

    Leider gibt mir diese Abfrage (k)ein Ergebniss zurück. 0 Zeilen betroffen.
    Vielleicht noch eine andere Idee?

    Nur damit die Frage nicht aufkommt: Ich hab mir die Mühe gemacht und von Hand 3 Mitarbeiter rausgesucht die sich in beiden Häusern anmelden.

    Ich habe auch mal folgendes Ausprobiert:

    SELECT MitarbeiterID
    FROM Anmeldung
    WHERE Haus IN ('1', '2')
    GROUP BY MitarbeiterID HAVING COUNT(*) = 2

    Aber das brachte leider das selbe Ergebniss.


    Gruß
    Dansch
    Geändert von dansch (29.08.10 um 11:29 Uhr)
     

  4. #4
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.774
    Blog-Einträge
    5
    Zitat Zitat von dansch Beitrag anzeigen
    Leider gibt mir diese Abfrage (k)ein Ergebniss zurück. 0 Zeilen betroffen.
    Vielleicht noch eine andere Idee?
    Wird dazu auch ein Fehler ausgegeben? Laut MSDN müsste INTERSECT spätestens seit SQL Server 2005 unterstützt sein. Ich kann das leider selbst nicht verifizieren.

    Zitat Zitat von dansch Beitrag anzeigen
    Ich habe auch mal folgendes Ausprobiert:

    SELECT MitarbeiterID
    FROM Anmeldung
    WHERE Haus IN ('1', '2')
    GROUP BY MitarbeiterID HAVING COUNT(*) = 2

    Aber das brachte leider das selbe Ergebniss.
    Damit findest du nur Mitarbeiter, die sich genau zweimal in Haus 1 oder 2 angemeldet haben.

    Probier mal diese Abfrage:
    Code sql:
    1
    2
    3
    4
    5
    6
    
    SELECT DISTINCT A1.MitarbeiterID
    FROM Anmeldung A1
    INNER JOIN Anmeldung A2 ON
      (A1.MitarbeiterID = A2.MitarbeiterID AND
       A2.Haus = '2')
    WHERE A1.Haus = '1'

    Grüße,
    Matthias

    P.S.: Wenn du bei deinen Beiträgen die Abfragen in [sql][/sql] einschließt, werden sie schön bunt und damit besser lesbar.
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  5. #5
    dansch dansch ist offline Grünschnabel
    Registriert seit
    Aug 2010
    Beiträge
    3
    Ohh mann....

    Ich Danke euch vielmals für eure Antworten!

    Das Problem lag zwischen meinen Ohren.
    Ich hab die Falsche Spalte angesprochen...

    Beide Ergebnisse führen zum selben Ergebniss ("309") und Intersect
    funktioniert auch.

    Ich stelle aber fest, dass ich noch einige Zeit brauchen werde bis ich die Joins verstanden habe und
    dann auch noch anwenden kann.
    Ich werde jetzt mal die Befehle googl'n und dann ein bisschen lesen

    Also nochmal vielen Dank für eure Hilfe...

    Viele Grüße
    Dansch