Abfrage mit mehreren Parameter

azn_d

Grünschnabel
Hallo,

ich bin mal wieder schier am verzweifeln...

Und zwar habe ich eine Tabelle "Mitarbeiter" und nun soll ich ausgeben wie viele Personen im Jahr 1995,1996,1997 reingekommen sind.
Jedes Jahr brauche ich eine eigene Spalte mit der Anzahl der Personen die in dem Jahr gekommen sind.

Ich hab bisher nur:

select count(*) Anzahl_Mitarbeiter
from mitarbeiter
where eintritts_datum like '%95%'

Dann kommt auch die Anzahl der Personen für das Jahr 1995 aber wie kann ich jetzt die anderen beiden Jahre noch als eigene Spalte in die Ausgabe hinzufügen?

Wäre sehr dankbar wenn mir jmd helfen könnte! :)

Grüße

azn_d

Tabelle Mitarbeiter
 
Mittels Pivot-Tabelle
SQL:
SELECT 
	SUM(IF(YEAR(eintritts_datum) = 1995, 1, 0) AS anzahl_mitarbeiter_1995,
	SUM(IF(YEAR(eintritts_datum) = 1996, 1, 0) AS anzahl_mitarbeiter_1996,
	SUM(IF(YEAR(eintritts_datum) = 1997, 1, 0) AS anzahl_mitarbeiter_1997
FROM
	mitarbeiter
WHERE 
	YEAR(eintritts_datum) IN (1995, 1996, 1997);

Oder mittels UNION. Naja, schön ist das aber nicht. Die Erste Version ist besser
SQL:
SELECT
	SUM(anzahl_mitarbeiter_1995)	AS anzahl_mitarbeiter_1995,
	SUM(anzahl_mitarbeiter_1996)	AS anzahl_mitarbeiter_1996,
	SUM(anzahl_mitarbeiter_1997)	AS anzahl_mitarbeiter_1997,
FROM
	(
		SELECT
			COUNT(*) 	AS anzahl_mitarbeiter_1995,
			0 			AS anzahl_mitarbeiter_1996,
			0			AS anzahl_mitarbeiter_1997
		FROM
			mitarbeiter
		WHERE 
			YEAR(eintritts_datum) = 1995
		UNION ALL
		SELECT
			0 			AS anzahl_mitarbeiter_1995,
			COUNT(*)	AS anzahl_mitarbeiter_1996,
			0			AS anzahl_mitarbeiter_1997
		FROM
			mitarbeiter
		WHERE 
			YEAR(eintritts_datum) = 1996
		UNION ALL
		SELECT
			0 			AS anzahl_mitarbeiter_1995,
			0 			AS anzahl_mitarbeiter_1996,
			COUNT(*)	AS anzahl_mitarbeiter_1997
		FROM
			mitarbeiter
		WHERE 
			YEAR(eintritts_datum) = 1997
	) AS un
 
Zuletzt bearbeitet von einem Moderator:
Geht das nicht einfach so?

SQL:
SELECT count(*), YEAR(eintritts_datum)
FROM mitarbeiter
WHERE YEAR(eintritts_datum) IN (1995,1996,1997)
GROUP BY YEAR(eintritts_datum)

Wobei YEAR() je nach DBMS auch anders heißen kann.
 
Nicht wenn er pro Jahr eine eigene Spalte haben will - und so habe ich es verstanden
 
Ouch ja, das habe ich überlesen. Bin von Zeilen ausgegangen, alles andere ist "komisch".
 
Mittels Pivot-Tabelle
SQL:
SELECT 
	SUM(IF(YEAR(eintritts_datum) = 1995, 1, 0) AS anzahl_mitarbeiter_1995,
	SUM(IF(YEAR(eintritts_datum) = 1996, 1, 0) AS anzahl_mitarbeiter_1996,
	SUM(IF(YEAR(eintritts_datum) = 1997, 1, 0) AS anzahl_mitarbeiter_1997
FROM
	mitarbeiter
WHERE 
	YEAR(eintritts_datum) IN (1995, 1996, 1997);


Hab noch nie was von Pivot gehört. Wenn ich diesen Code in SQLDev einfüge kommt bei mir immer eine Fehlermeldung dass eine Rechte Klammer fehlt :)

Geht das nicht einfach so?

SQL:
SELECT count(*), YEAR(eintritts_datum)
FROM mitarbeiter
WHERE YEAR(eintritts_datum) IN (1995,1996,1997)
GROUP BY YEAR(eintritts_datum)

Wobei YEAR() je nach DBMS auch anders heißen kann.

War ein Versuch. Trotzdem Danke! :)
 
Zuletzt bearbeitet von einem Moderator:
SQLDev? Kenn ich nicht. Ich ging mal von MySQL aus, scheint aber nicht zu stimmen. Anstelle vom IF ist in den mesiten DB-Sprachen ein CASE-Konstrukt gültig.
 

Neue Beiträge

Zurück