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

SQL Server查询需求:计算YTD利用率(累计月度利用率百分比)

计算SQL Server中年初至今(YTD)的利用率累计百分比

嘿,这个需求其实用SQL Server的窗口函数就能很优雅地解决,不用写复杂的自连接或者子查询。我来一步步给你拆解:

核心思路

我们需要对每个月的利用率百分比做累计求和,也就是从当年1月到当前月的所有百分比加总。这里的关键是用SUM() OVER()窗口函数,它能帮我们在不分组的情况下计算累计值。

基础查询(假设表结构完整)

首先假设你的表名为UtilizationData,包含以下字段:

  • CalendarYear:年份(比如2024)
  • CalendarMonth:月份(1到12的整数)
  • MonthlyUtilizationPct:当月的利用率百分比

基础的查询语句如下:

SELECT
    CalendarYear,
    CalendarMonth,
    MonthlyUtilizationPct,
    -- 计算YTD累计:按年份分组,按月份顺序累加
    SUM(MonthlyUtilizationPct) OVER (
        PARTITION BY CalendarYear 
        ORDER BY CalendarMonth 
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS YTDUtilizationPct
FROM UtilizationData
ORDER BY CalendarYear, CalendarMonth;

代码解释

  • PARTITION BY CalendarYear:确保我们只在同一年份内做累计,不会把2023年的12月和2024年的1月混在一起。
  • ORDER BY CalendarMonth:保证累加是按照1月到12月的顺序进行的。
  • ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW:这部分是窗口函数的范围,意思是从当前分组的第一行(当年1月)一直累加到当前行(当前月份)。其实在SQL Server中,当你用ORDER BY在窗口函数里时,这个范围是默认的,所以可以省略,但写出来更清晰。

处理缺失月份的情况

如果你的表中可能存在某些月份没有数据(比如某个月没有记录),直接用上面的查询会漏掉这些月份,导致累计不连续。这时我们可以先生成全年的月份序列,再左连接原表来补全:

WITH YearMonths AS (
    -- 生成1-12的月份,这里假设我们要处理2024年,你可以改成动态年份
    SELECT 
        2024 AS CalendarYear,
        MonthNumber
    FROM (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) AS Months(MonthNumber)
)
SELECT
    ym.CalendarYear,
    ym.MonthNumber AS CalendarMonth,
    ISNULL(ud.MonthlyUtilizationPct, 0) AS MonthlyUtilizationPct,
    SUM(ISNULL(ud.MonthlyUtilizationPct, 0)) OVER (
        PARTITION BY ym.CalendarYear 
        ORDER BY ym.MonthNumber
    ) AS YTDUtilizationPct
FROM YearMonths ym
LEFT JOIN UtilizationData ud 
    ON ym.CalendarYear = ud.CalendarYear 
    AND ym.MonthNumber = ud.CalendarMonth
ORDER BY ym.CalendarYear, ym.MonthNumber;

这样即使某个月份没有数据,它的当月利用率会被设为0,YTD累计也会包含这个0,保证序列的完整性。

示例结果

假设原表有以下数据:

CalendarYearCalendarMonthMonthlyUtilizationPct
2024110
2024215
202438

运行第一个查询后会得到:

CalendarYearCalendarMonthMonthlyUtilizationPctYTDUtilizationPct
202411010
202421525
20243833

完美符合你要的YTD累计效果!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:20:24