3

Je ne sais pas si c'est possible, mais je veux obtenir un compte dans une condition spécifique qui est différente de la requête principale.Comment obtenir Count sous condition spécifique en plus des conditions principales?

Si j'ai deux tables comme ceci:

Overtime 

emp_num, dep_code, trans_date, overtime   shift_id 
13   305  2017-9-1  02:27:00.0000000  12 
13   305  2017-9-2  02:21:00.0000000  14 
13   305  2017-9-4  01:21:00.0000000  13 
18   305  2017-9-4  06:21:00.0000000  14 
18   305  2017-9-10  09:21:00.0000000  14 
18   305  2017-9-18  08:21:00.0000000  13 

Employee 

emp_num, name 
13   Joe 
18   Maria 

Ma Recherche

SELECT a.emp_num ,b.NAME,COUNT(*) AS 'Num of days' 
from Overtime a INNER JOIN Employee b 
ON a.emp_num = b.emp_num 
WHERE a.dep_code = 305 AND trans_date BETWEEN '2017-9-1' AND '2017-9-30' 
and over_time >= '02:00:00.0000000' 
GROUP BY a.emp_num ,b.NAME 

Maintenant, je veux obtenir dans le même pr requête Evious également le nombre de quarts de travail (comptage) avec shift_id =14 pour chaque employé dans la même requête (Cette condition est appartiennent seulement pour cette partie des données)


Le résultat attendu pour l'exemple.

emp_num  Name  Num of days  Num of shifts 
    13   Joe   2     1 

    18   Maria  3     2 
+0

Ajouter des données de table de l'échantillon et le résultat attendu (sous forme de texte formaté, pas les images.) – jarlh

Répondre

2

Vous pouvez ajouter une nouvelle clause de cas dans votre requête

SELECT 
a.emp_num , 
b.NAME, 
COUNT(*) AS 'Num of days', 
SUM(CASE WHEN Shift_id=14 THEN 1 ELSE 0 END) as 'Number of days with Shift id 14' 
from Overtime a INNER JOIN Employee b 
ON a.emp_num = b.emp_num 
WHERE a.dep_code = 305 AND trans_date BETWEEN '2017-9-1' AND '2017-9-30' 
and over_time >= '02:00:00.0000000' 
GROUP BY a.emp_num ,b.NAME 
2

Vous pouvez essayer ceci.

SELECT 
    a.emp_num , 
    b.NAME,COUNT(*) AS 'Num of days', 
    COUNT(CASE WHEN shift_id =14 THEN shift_id ELSE NULL END) AS 'Num of shifts' 
from 
    Overtime a 
    INNER JOIN Employee b ON a.emp_num = b.emp_num 
WHERE a.dep_code = 305 AND trans_date BETWEEN '2017-9-1' AND '2017-9-30' 
and over_time >= '02:00:00.0000000' 
GROUP BY a.emp_num ,b.NAME