我有一组数据,按部门划分,按财年划分,按财季划分,最后按总额划分,如下所示。
+---------------------------------+------------+---------------+-------------+
| 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()窗口函数,但在指定偏移量时遇到了困难,因为它不是标准偏移量。
任何帮助/想法都是很棒的。
发布于 2019-10-25 00:11:24
this怎么样?
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发布于 2019-10-25 00:09:33
您可以使用内联查询:
select
t.*,
(
select t1.TotalAmount
from mytable t1
where t1.FiscalQuarter = t.FiscalQuarter and t1.FiscalYear = t.FiscalYear - 1
) lastTotalAmount
from mytable t发布于 2019-10-25 00:27:59
假设您有每年的数据,请使用窗口函数:
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;窗口函数通常会产生最快的查询,并且比替代函数更简洁。
https://stackoverflow.com/questions/58545125
复制相似问题