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

SQL Server按job_number和小时分组统计批量数据求助

解决按job_number和小时分组统计的SQL方案

核心实现思路

要生成单日每小时、每个job的批量完成数报表,核心是分组聚合+列转行,这里提供两种通用方案,适配不同SQL数据库:

方法一:CASE WHEN条件聚合(全数据库通用)

假设你的原始表包含job_number(工单号)、complete_time(完成时间)、batch_count(批量完成数)三个核心字段,直接用CASE WHEN配合SUM实现分组统计:

SELECT
    job_number,
    -- 针对每个小时段做条件统计,没有数据则返回NULL
    SUM(CASE WHEN EXTRACT(HOUR FROM complete_time) = 10 THEN batch_count ELSE NULL END) AS hour_10,
    SUM(CASE WHEN EXTRACT(HOUR FROM complete_time) = 11 THEN batch_count ELSE NULL END) AS hour_11,
    -- 按需求补充0-23所有小时段的统计逻辑
    SUM(CASE WHEN EXTRACT(HOUR FROM complete_time) = 23 THEN batch_count ELSE NULL END) AS hour_23
FROM
    your_table_name
WHERE
    -- 筛选单日数据,替换成你需要的日期
    DATE(complete_time) = '2024-05-20'
GROUP BY
    job_number;

如果你的需求是统计记录条数而非批量数,把batch_count换成1即可:

SUM(CASE WHEN EXTRACT(HOUR FROM complete_time) = 10 THEN 1 ELSE NULL END) AS hour_10

方法二:PIVOT透视表(适用于Oracle、SQL Server、PostgreSQL 11+)

以SQL Server为例,用原生PIVOT语法简化逻辑:

SELECT
    job_number,
    [10] AS hour_10,
    [11] AS hour_11,
    -- 补充其他需要展示的小时段
    [23] AS hour_23
FROM
    (
        -- 先提取核心分组字段和统计值
        SELECT
            job_number,
            DATEPART(HOUR, complete_time) AS hour,
            batch_count
        FROM your_table_name
        WHERE CAST(complete_time AS DATE) = '2024-05-20'
    ) AS source_data
PIVOT
(
    SUM(batch_count)
    -- 指定要转成列的小时值
    FOR hour IN ([10], [11], [12], ..., [23])
) AS pivot_table;

常见问题排查

  • 若分组后出现重复job_number:检查GROUP BY是否仅包含job_number,避免误加其他字段。
  • 若小时字段全为NULL:排查时间字段的时区是否正确,或日期筛选条件是否匹配数据格式。
  • 若统计数值错误:确认聚合函数(SUM/COUNT)是否符合需求,比如是统计批量数还是记录数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:22:14