【问题标题】:YoY Calculations on Rows in Same Column SQL Server Management Studio同一列 SQL Server Management Studio 中行的 YoY 计算
【发布时间】:2017-07-18 21:34:55
【问题描述】:
Business Unit |  Date  | Sales
North America | 5/1/17 | 5,000
North America | 4/1/17 | 4,000
North America | 3/1/17 | 3,000
North America | 2/1/17 | 2,000
North America | 1/1/17 | 1,000
          ............
North America | 5/1/16 | 4,000
North America | 4/1/16 | 3,000
North America | 3/1/16 | 2,000
North America | 2/1/16 | 2,000
North America | 1/1/16 |   500
         ............
Asia          | 5/1/17 | 5,000
Asia          | 4/1/17 | 2,000
Asia          | 3/1/17 | 1,000
Asia          | 2/1/17 | 3,000
Asia          | 1/1/17 | 1,500
          ............
Asia          | 5/1/16 | 4,000
Asia          | 4/1/16 | 2,000
Asia          | 3/1/16 |   500
Asia          | 2/1/16 | 1,500
Asia          | 1/1/16 | 1,000

每个月都由 38、30 或 31 天组成 - 但是为了方便示例,我只在上面的数据中显示了前几天。

以下是我希望实现的输出示例:

Business Unit |  Date  | Sales | Year over Year Change |
North America | 5/1/17 | 5,000 |           25%         |
North America | 4/1/17 | 4,000 |           33%         |
North America | 3/1/17 | 3,000 |           50%         |
North America | 2/1/17 | 2,000 |            0%         |
North America | 1/1/17 | 1,000 |           50%         |
          ............
North America | 5/1/16 | 4,000 |           xx%         |
North America | 4/1/16 | 3,000 |           xx%         |
North America | 3/1/16 | 2,000 |           xx%         |
North America | 2/1/16 | 2,000 |           xx%         |
North America | 1/1/16 |   500 |           xx%         |
         ............
Asia          | 5/1/17 | 5,000 |           25%         |
Asia          | 4/1/17 | 2,000 |            0%         |
Asia          | 3/1/17 | 1,000 |          100%         |
Asia          | 2/1/17 | 3,000 |          100%         |
Asia          | 1/1/17 | 1,500 |           50%         |
          ............
Asia          | 5/1/16 | 4,000 |           xx%         |
Asia          | 4/1/16 | 2,000 |           xx%         |
Asia          | 3/1/16 |   500 |           xx%         |
Asia          | 2/1/16 | 1,500 |           xx%         |
Asia          | 1/1/16 | 1,000 |           xx%         |

如上所述,这些数据是每日数据,可以追溯到多年前。非常感谢您的任何帮助!

【问题讨论】:

    标签: sql-server sql-server-2012 ssms


    【解决方案1】:

    您可以如下查询:

    Select coalesce(lastyear.[Business Unit], currentyear.[Business Unit]) as BusinessUnit, currentyear.[date], lastyear.[date] as [LastYear Date],
        Format((1-(lastyear.Sales*1.0)/currentyear.Sales), 'p') 
    from #yoydata lastyear
    left join #yoydata currentyear
    on lastyear.[date] = dateadd(yy,-1,currentyear.[date])
    and lastyear.[Business Unit] = currentyear.[Business Unit]
    

    【讨论】:

    • 非常感谢您非常接近。不过,实际计算列似乎已关闭。当我将它插入到我的实际数据中时,它会提取正确的日期,但是它不会计算根据去年日期变化的年份
    • 这有意义吗?
    • 你遇到了什么问题?
    • 是的,你是对的,复制粘贴错误和去年。[Business Unit] = currentyear.[Business Unit]
    【解决方案2】:
    SELECT
        COALESCE(lastyear.[bu], currentyear.[bu]) AS BusinessUnit
        , currentyear.[dt]
        , lastyear.[dt]                             AS [LastYear Date]
        , Format((1-(lastyear.Sales*1.0)/currentyear.Sales), 'p') 
    FROM
        #yoydata lastyear 
            LEFT JOIN #yoydata currentyear  ON lastyear.[dt] = dateadd(yy,-1,currentyear.[dt]) 
                                                AND lastyear.bu = currentyear.bu
    

    【讨论】:

    • 上一个答案只是缺少业务部门的加入。
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多