首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获得与上一年相同的季度收入

获得与上一年相同的季度收入
EN

Stack Overflow用户
提问于 2019-10-25 00:02:09
回答 3查看 41关注 0票数 0

我有一组数据,按部门划分,按财年划分,按财季划分,最后按总额划分,如下所示。

代码语言:javascript
复制
+---------------------------------+------------+---------------+-------------+
|            Department           | FISCALYEAR | FISCALQUARTER | TotalAmount |
+---------------------------------+------------+---------------+-------------+
| Internal Medicine - Dermatology |       2018 |             2 | 50.00       |
| Internal Medicine - Dermatology |       2018 |             4 | 75.00       |
| Internal Medicine - Dermatology |       2019 |             1 | 135.00      |
| Internal Medicine - Dermatology |       2019 |             2 | 75.00       |
| Internal Medicine - Dermatology |       2019 |             3 | 185.00      |
| Internal Medicine - Dermatology |       2019 |             4 | 84.00       |
| Internal Medicine - Dermatology |       2020 |             1 | 85.00       |
| Internal Medicine - Dermatology |       2020 |             2 | 10.00       |
+---------------------------------+------------+---------------+-------------+

如何添加一列以获取上一年/上一季度的总金额?例如,2020财年,第二财季将显示75.00。

困难的部分是,一些季度没有任何数据,因此存在差距。

我尝试过一个LAG()窗口函数,但在指定偏移量时遇到了困难,因为它不是标准偏移量。

任何帮助/想法都是很棒的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-25 00:11:24

this怎么样?

代码语言:javascript
复制
IF OBJECT_ID('tempdb.dbo.#YourTable', 'U') IS NOT NULL DROP TABLE #YourTable; 

CREATE TABLE #YourTable(
   Department    VARCHAR(33) NOT NULL
  ,FISCALYEAR    INTEGER  NOT NULL
  ,FISCALQUARTER INTEGER  NOT NULL
  ,TotalAmount   NUMERIC(7,2) NOT NULL
);

INSERT INTO #YourTable(Department,FISCALYEAR,FISCALQUARTER,TotalAmount) VALUES ('Internal Medicine - Dermatology',2018,2,50.00);
INSERT INTO #YourTable(Department,FISCALYEAR,FISCALQUARTER,TotalAmount) VALUES ('Internal Medicine - Dermatology',2018,4,75.00);
INSERT INTO #YourTable(Department,FISCALYEAR,FISCALQUARTER,TotalAmount) VALUES ('Internal Medicine - Dermatology',2019,1,135.00);
INSERT INTO #YourTable(Department,FISCALYEAR,FISCALQUARTER,TotalAmount) VALUES ('Internal Medicine - Dermatology',2019,2,75.00);
INSERT INTO #YourTable(Department,FISCALYEAR,FISCALQUARTER,TotalAmount) VALUES ('Internal Medicine - Dermatology',2019,3,185.00);
INSERT INTO #YourTable(Department,FISCALYEAR,FISCALQUARTER,TotalAmount) VALUES ('Internal Medicine - Dermatology',2019,4,84.00);
INSERT INTO #YourTable(Department,FISCALYEAR,FISCALQUARTER,TotalAmount) VALUES ('Internal Medicine - Dermatology',2020,1,85.00);
INSERT INTO #YourTable(Department,FISCALYEAR,FISCALQUARTER,TotalAmount) VALUES ('Internal Medicine - Dermatology',2020,2,10.00);

SELECT a.Department, a.FISCALYEAR, a.FISCALQUARTER, 
       a.TotalAmount, b.TotalAmount AS PriorYearQuarterTotalAmount
FROM #YourTable a
LEFT JOIN #YourTable b ON a.Department = b.Department
                     AND a.FISCALYEAR - 1 = b.FISCALYEAR
                     AND a.FISCALQUARTER = b.FISCALQUARTER
票数 1
EN

Stack Overflow用户

发布于 2019-10-25 00:09:33

您可以使用内联查询:

代码语言:javascript
复制
select 
    t.*,
    (
        select t1.TotalAmount 
        from mytable t1 
        where t1.FiscalQuarter = t.FiscalQuarter and t1.FiscalYear = t.FiscalYear - 1
    ) lastTotalAmount
from mytable t
票数 0
EN

Stack Overflow用户

发布于 2019-10-25 00:27:59

假设您有每年的数据,请使用窗口函数:

代码语言:javascript
复制
SELECT a.Department, a.FISCALYEAR, a.FISCALQUARTER, 
       a.TotalAmount,
       LAG(a.TotalAmount) OVER (PARTITION BY a.Department, a.FISCALQUARTER ORDER BY a.FISCALYEAR) AS PriorYearQuarterTotalAmount
FROM a;

窗口函数通常会产生最快的查询,并且比替代函数更简洁。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58545125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档