2017-10-11 4 views
0

J'essaie d'afficher les jours de vacances et les jours de maladie moyens pendant 3 périodes.Afficher les heures moyennes dans des périodes spécifiques à l'aide de SQL

Jusqu'à présent, j'ai cette requête SQL:

SELECT AVG(VACATIONHOURS) AS 'Vacation hours', AVG(SICKLEAVEHOURS) AS 'SICK DAYS' 
FROM HUMANRESOURCES.EMPLOYEE E 
WHERE E.BIRTHDATE BETWEEN '01-01-1960' AND '12-31-1969' 
UNION ALL 
SELECT AVG(VACATIONHOURS) AS 'VACATION', AVG(SICKLEAVEHOURS) AS 'SICK DAYS' 
FROM HUMANRESOURCES.EMPLOYEE E 
WHERE E.BIRTHDATE BETWEEN '01-01-1970' AND '12-31-1979' 
UNION ALL 
SELECT AVG(VACATIONHOURS) AS 'VACATION', AVG(SICKLEAVEHOURS) AS 'SICK DAYS' 
FROM HUMANRESOURCES.EMPLOYEE E 
WHERE E.BIRTHDATE BETWEEN '01-01-1980' AND '12-31-1989' 
; 

Ma sortie a seulement 2 colonnes de jour et de vacances et malades 3 rangées sous des numéros.

Output picture

Ma question est de savoir comment ajouter une 3ème colonne qui montrera des années?

J'ai besoin que pour générateur de rapports, afin que je puisse représenter cette information correctement

+1

Qu'entendez-vous par années? Voulez-vous écrire de 1960 à 1969 en première ligne et ainsi de suite? – Valli

+0

J'ai besoin d'ajouter une troisième colonne qui indiquera que 45 et 42 numéros sont sélectionnés de l'année 1960 à 1969 – ANNA

Répondre

0

J'espère que vous cherchez à ajouter l'année dans la clause where ajoutez simplement max (années)

SELECT AVG(VACATIONHOURS) AS 'Vacation hours', 
     AVG(SICKLEAVEHOURS) AS 'SICK DAYS', 
     max('1960 to 1969') 
FROM HUMANRESOURCES.EMPLOYEE E 
WHERE E.BIRTHDATE BETWEEN '01-01-1960' AND '12-31-1969' 
+0

c'est exactement ce que je cherchais. Je ne comprends pas comment fonctionne la méthode 'max'? – ANNA

+0

Si vous utilisez simplement '1960 à 1969', vous obtiendrez une erreur indiquant que ce n'est pas un groupe par fonction. Donc, si vous utilisez une fonction d'agrégat comme max ou min, vous n'avez pas besoin d'ajouter un groupe. Dans ce cas, Max (une certaine chaîne) et une certaine chaîne est la même – Valli

+0

Je vois, donne un sens. Merci – ANNA

0

I suggérerait que vous les mettiez dans des groupes. Je voudrais juste faire:

SELECT CONCAT(YEAR(BIRTHDATE), 's') as decade, 
     AVG(VACATIONHOURS) AS `Vacation hours`, 
     AVG(SICKLEAVEHOURS) AS `SICK DAYS` 
FROM HUMANRESOURCES.EMPLOYEE E 
GROUP BY decade 
ORDER BY decade;