3

これが可能かどうかわかりませんが、メインクエリとは異なる特定の条件でカウントを取得したいと考えています。私はこのような2つのテーブルがある場合主な条件に加えて特定の条件の下でカウントを得る方法は?

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 

私のクエリを

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 

は、今私は同じ広報に取得したいですeviousクエリも同じクエリの各従業員のshift_id =14とシフトの数(カウント)(この条件は、データのみのこの部分のために属している)


例えば予想される結果:。

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

    18   Maria  3     2 
+0

は、いくつかのサンプル・テーブル・データと予想される結果を追加クエリで新しいケース句を追加することができます(フォーマットされたテキストではなく画像として。) – jarlh

答えて

2

あなたが

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

これを試すことができます。

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 
関連する問題