【问题标题】:Break Quarter into Months in SQL Server在 SQL Server 中将季度分成几个月
【发布时间】:2022-12-18 08:19:40
【问题描述】:

我想把季度分成几个月。在源代码中我有 2019Q1 但我需要将一条记录分成 3 条记录

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

期望的结果:

mpid  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

【问题讨论】:

  • 那么是什么阻止了你?你试过什么?为什么它不起作用?你有日历表吗?如果没有,我建议投资一个。
  • 这让我想起了那些犯罪剧电视节目,他们在犯罪现场用相机拍下了一张有点模糊的照片。他们所要做的就是说“增强”,他们就会得到更好的分辨率。把月度数据汇总成季度数据很容易,但你不能只说“加强”,把季度数据变成月度数据。
  • 但如果你这样做并总结月份,现在突然间你的 2019 年第一季度的收益为12'000- 不是 4'000 ......在这里神奇地增加你的收入......

标签: sql-server


【解决方案1】:

如果您不需要按月计算的“收入”值,则只需设置一个 CTE 以将 Q# 与相应的月份相匹配,并将其添加到您的查询中。

【讨论】:

    【解决方案2】:

    正如 Larnu 所建议的那样,日历表非常值得付出努力。也就是说,这是一个执行一对多连接到临时表的选项

    例子

    Select empid
          ,MonthYear = datename(month,datefromparts(left(Quarter,4),MM,1))+' '+left(Quarter,4)
          ,Earnings
     From YourTable A
     Join (
            Select *
             From  ( values (1,1) 
                           ,(1,2) 
                           ,(1,3) 
                           ,(2,4) 
                           ,(2,5) 
                           ,(2,6) 
                           ,(3,7) 
                           ,(3,8) 
                           ,(3,9) 
                           ,(4,10) 
                           ,(4,11) 
                           ,(4,12) 
                   )B1(QQ,MM)
          ) B on right(Quarter,1)=QQ
    

    结果

    empid   MonthYear       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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多