You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL查询分列展示工作日与周末的工单总量?

工作日与周末工单量统计SQL优化方案

问题描述

我需要对比2023年1月至12月工单数据集中周末与工作日的工单量。当前使用的SQL查询如下:

SELECT 
    DATENAME(DW, Created_time) AS Daily_Volume, 
    COUNT(DISTINCT Ticket_ID) AS Total_Request 
FROM 
    [SLA DB].[dbo].[data_challenge]
GROUP BY 
    DATENAME(DW, Created_time)

该查询返回了全年每周各天的累计工单量,但我希望将工作日和周末的工单总量分别放在独立的列中,请问如何编写SQL查询实现这一需求?

示例数据集

Ticket_IDPrioritySourceCreated_time
1012LowEmail2023-01-02 00:58:00.0000000
1013HighPhone2023-01-02 07:27:00.0000000
1014LowChat2023-01-02 06:59:00.0000000
1015MediumEmail2023-01-03 03:09:00.0000000
1016LowEmail2023-01-03 00:03:00.0000000

解决方案

可以通过条件聚合实现需求,用CASE语句区分工作日和周末,分别统计工单总量:

方案一:通过星期名称判断

SELECT
    COUNT(DISTINCT CASE WHEN DATENAME(DW, Created_time) NOT IN ('Saturday', 'Sunday') THEN Ticket_ID END) AS 工作日工单总量,
    COUNT(DISTINCT CASE WHEN DATENAME(DW, Created_time) IN ('Saturday', 'Sunday') THEN Ticket_ID END) AS 周末工单总量
FROM
    [SLA DB].[dbo].[data_challenge]
WHERE
    Created_time BETWEEN '2023-01-01' AND '2023-12-31 23:59:59.999'

方案二:通过星期数字判断(适配不同SQL Server配置)

如果你的SQL Server将周日设为星期1,周一到周五对应2-6,周六对应7,可以用数字判断:

SELECT
    COUNT(DISTINCT CASE WHEN DATEPART(WEEKDAY, Created_time) BETWEEN 2 AND 6 THEN Ticket_ID END) AS 工作日工单总量,
    COUNT(DISTINCT CASE WHEN DATEPART(WEEKDAY, Created_time) IN (1,7) THEN Ticket_ID END) AS 周末工单总量
FROM
    [SLA DB].[dbo].[data_challenge]
WHERE
    Created_time BETWEEN '2023-01-01' AND '2023-12-31 23:59:59.999'

关键说明

  • CASE语句根据星期属性筛选工单,仅符合条件的Ticket_ID会被计入对应列的统计
  • COUNT(DISTINCT ...)保证每个工单ID只被统计一次,避免重复计数
  • WHERE条件限定了2023年全年的数据范围,确保统计结果精准

内容的提问来源于stack exchange,提问作者Bashiru Otokiti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 11:25:06