【问题标题】:Count function with time condition带时间条件的计数功能
【发布时间】:2020-02-19 14:33:14
【问题描述】:

我有一个类似于以下的数据库。我希望计算在工作时间内发生的指定、紧急和测量员工作类型。还计算了 No Access 和 Follow On 事件摘要。

标准是我们正在寻找的工作是 ArrivedDAY NOT IN ('Saturday','Sunday),如果是周一到周五的工作,则 ArrTime 在 08:00:00 - 16:30:00 之间

我已经设法减少了计数部分,但事实证明排除我不需要的数据很困难,我们将不胜感激。

这是在 SQL Server Studio 上

干杯 马特

【问题讨论】:

  • 请不要使用图像,而是使用带有示例数据的表结构以获得快速帮助!!!
  • 发布用于获取图片中结果集的查询(作为文本代码块,而不是图片)。听起来您只需要一个WHERE 子句,但任何人都可以做的就是在没有看到您的代码的情况下猜测。
  • 结果集只是我想从查询中检索的一个示例,我无法做到

标签: sql sql-server count


【解决方案1】:

我相信您正在寻找条件聚合。

SELECT
  Operative,
  SUM(CASE WHEN JobType = 'APPOINTED' THEN 1 ELSE 0 END) AS Appointed,
  SUM(CASE WHEN JobType = 'EMERGENCY' THEN 1 ELSE 0 END) AS Emergency,
  SUM(CASE WHEN JobType = 'SURVEYOR' THEN 1 ELSE 0 END) AS Surveyor,
  COUNT(JobNumber) AS TotalJobs,
  SUM(CASE WHEN EventSummary = 'No Access' THEN 1 ELSE 0 END) AS NoAccess,
  SUM(CASE WHEN EventSummary = 'Follow On' THEN 1 ELSE 0 END) AS FollowOn
FROM
  Tbl
WHERE
  ArrivedDAY <> 'Saturday'
  AND ArrivedDAY <> 'Sunday'
  AND ArrTime >= '08:00:00'
  AND ArrTime <= '16:30:00'
GROUP BY
  Operative;

【讨论】:

    【解决方案2】:

    试一试,对您的结构进行一些猜测。 然后,您可以旋转结果以获取作业类型作为列名

    select
     operative
    ,jobtype
    ,count(*) as [count]
    
    from jobs --replace with your table name
    
    where arrivedday not in ('Saturday','Sunday') --alternatively use where weekday(arriveddate) not in (1,7)
    
    and datepart(hour,arrtime) > 8
    and (datepart(hour,arrtime) < 17 and datepart(minute,artime) <= 30)
    
    group by
     operative
    ,jobtype
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      相关资源
      最近更新 更多