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

SQL Server聚合查询需求:员工号1的Period聚合结果单行输出

嘿,我来帮你搞定这个SQL需求!先明确下你的核心诉求:针对员工号1的数据,按周期汇总Actual,同时把全局Actual总和、各周期的Actual汇总和对应的Budgeted都输出成一行。下面给你两种实用的解决方案,适配不同的场景:

先看你的原始数据

empnoPeriodActualBudgeted
1May12.022.1
1May6.022.1
1June1.540.4
1June8.940.4

方案一:固定列的单行结果(推荐用于报表/程序处理)

这种方法用条件聚合实现,几乎所有主流SQL数据库(MySQL、PostgreSQL、SQL Server、Oracle等)都支持。它会把每个指标单独作为一列输出,结构清晰,非常适合后续的程序处理或者报表展示。

SELECT
    -- 所有Actual的总和
    SUM(Actual) AS total_actual,
    -- May的Actual汇总
    SUM(CASE WHEN Period = 'May' THEN Actual ELSE 0 END) AS may_actual,
    -- May对应的Budgeted(同一周期值相同,用MAX/AVG/MIN都可以)
    MAX(CASE WHEN Period = 'May' THEN Budgeted END) AS may_budgeted,
    -- June的Actual汇总
    SUM(CASE WHEN Period = 'June' THEN Actual ELSE 0 END) AS june_actual,
    -- June对应的Budgeted
    MAX(CASE WHEN Period = 'June' THEN Budgeted END) AS june_budgeted
FROM
    your_table_name  -- 把这里替换成你的实际表名
WHERE
    empno = 1;

执行后你会得到这样的单行结果:

total_actualmay_actualmay_budgetedjune_actualjune_budgeted
28.418.022.110.440.4

方案二:动态拼接的单行文本(适用于周期不固定的场景)

如果你的Period可能会新增(比如后续加入July、August),不想每次修改SQL,那可以先按周期汇总,再把结果拼接成单行的键值对文本。以MySQL为例:

WITH period_summary AS (
    -- 先按周期汇总每个月的Actual和Budgeted
    SELECT
        Period,
        SUM(Actual) AS period_actual,
        MAX(Budgeted) AS period_budgeted
    FROM your_table_name
    WHERE empno = 1
    GROUP BY Period
),
total_summary AS (
    -- 计算全局的Actual总和
    SELECT SUM(Actual) AS total_actual
    FROM your_table_name
    WHERE empno = 1
)
-- 把所有结果拼接成单行文本
SELECT
    CONCAT(
        'total_actual: ', total_actual, ', ',
        GROUP_CONCAT(
            CONCAT(Period, '_actual: ', period_actual, ', ', Period, '_budgeted: ', period_budgeted)
            SEPARATOR ', '
        )
    ) AS single_row_result
FROM period_summary, total_summary;

执行后会得到类似这样的单行输出:
total_actual: 28.4, May_actual: 18.0, May_budgeted: 22.1, June_actual: 10.4, June_budgeted: 40.4


小提示

  • 同一周期的Budgeted值是相同的,所以用MAX()、MIN()或者AVG()都能正确拿到这个值,这里用MAX()逻辑上更直观;
  • 如果是其他数据库(比如PostgreSQL),把GROUP_CONCAT换成STRING_AGG就能用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:22:26