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

SQL Server中如何将季度数据拆分为对应月度记录

在SQL Server中将季度数据拆分至月度数据

需求说明

现有包含empid、Quarter(格式如2019Q1)、earnings字段的季度数据,需将每条季度记录拆分为对应季度的3条月度记录,earnings值保持不变,月份格式为「月份全称 年份」(如January 2019)。

源数据

empid Quarter earnings
-----------------------
 123    2019Q1  4000
 456    2019Q2  6000

期望结果

empid  Month        earnings
---------------------------
 123  January 2019   4000
 123  February 2019  4000
 123  March 2019     4000
 456  April 2019     6000
 456  May 2019       6000
 456  June 2019      6000

解决方案SQL语句

使用CROSS JOIN结合值列表生成季度内的3个月份,通过日期函数解析并转换月份格式:

SELECT 
    empid,
    -- 生成「月份全称 年份」格式的月份字符串
    DATENAME(MONTH, DATEFROMPARTS(CAST(LEFT(Quarter, 4) AS INT), 
                                  (CAST(RIGHT(Quarter, 1) AS INT)-1)*3 + n.month_offset, 
                                  1)) + ' ' + LEFT(Quarter, 4) AS Month,
    earnings
FROM 
    -- 替换为你的实际表名
    YourTableName
-- 关联生成季度内的3个月份偏移量
CROSS JOIN 
    (VALUES (1), (2), (3)) AS n(month_offset)
-- 按员工ID、年份、月份排序,保证结果顺序正确
ORDER BY 
    empid, 
    CAST(LEFT(Quarter, 4) AS INT), 
    (CAST(RIGHT(Quarter, 1) AS INT)-1)*3 + n.month_offset;

语句说明

  1. 解析季度字段:通过LEFT(Quarter,4)提取年份,RIGHT(Quarter,1)提取季度编号;
  2. 计算月度日期:利用DATEFROMPARTS构造每个月的1号日期,结合季度编号计算起始月份(如Q1起始为1月,Q2为4月),加上偏移量得到季度内的3个月份;
  3. 转换月份格式:使用DATENAME(MONTH)获取月份的英文全称,拼接年份得到目标格式;
  4. 生成多条记录:通过CROSS JOIN值列表,给每条季度记录生成3条对应月度的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:10:34