【问题标题】:How to get Count under specific condtion in addition to the main conditions?除主要条件外,如何在特定条件下获得Count?
【发布时间】:2018-03-14 10:14:07
【问题描述】:

我不知道这是否可能,但我想在与主查询不同的特定条件下获得计数。

如果我有两个这样的表:

    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

现在我想在同一个查询中获取同一查询中每个员工shift_id =14 的班次(计数)数。(此条件仅适用于这部分数据)


示例的预期结果:

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

     18          Maria        3                 2

【问题讨论】:

  • 添加一些示例表数据和预期结果(作为格式化文本,而不是图像。)

标签: sql sql-server sql-server-2012 subquery aggregate-functions


【解决方案1】:

您可以在查询中添加新的 case 子句

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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 2013-02-24
      • 2022-01-08
      • 2016-09-30
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      相关资源
      最近更新 更多