SQL Anfängerproblemchen

dansch

Grünschnabel
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
 
Hallo Dansch,

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

Grüße,
Matthias
 
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
 
Zuletzt bearbeitet:
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.

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:
SQL:
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 [code=sql][/code] einschließt, werden sie schön bunt und damit besser lesbar.
 
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
 
Zurück