免責聲明:您應該認真考慮使用標準的SQL Server日期或時間戳列代表SalaryMonth
。使用字符串月份名稱會產生各種問題,因此我在下面詳細解答。
我的方法是使用CTE爲每個月份的名稱分配一個數字位置(cte1
)。然後,我將其加入您的原始表格(cte2
)。最後,我們可以自己加入cte2
來計算表格過程中的滾動工資。
可能有一種方法可以使用月份名稱來創建某種類型的日期對象,但我無法想到它,並且無論如何這樣做可能需要分配一個虛擬年份以及可能的其他事物。
WITH cte1 AS (
SELECT 'January' AS SalaryMonth, 1 AS MonthPos
UNION ALL
SELECT 'Februrary', 2
UNION ALL
SELECT 'March', 3
UNION ALL
SELECT 'April', 4
UNION ALL
SELECT 'May', 5
UNION ALL
SELECT 'June', 6
UNION ALL
SELECT 'July', 7
UNION ALL
SELECT 'August', 8
UNION ALL
SELECT 'September', 9
UNION ALL
SELECT 'October', 10
UNION ALL
SELECT 'November', 11
UNION ALL
SELECT 'December', 12
),
WITH cte2 AS (
SELECT t1.EmpID,
t1.SalaryMonth,
t2.MonthPos,
t1.Salary
FROM yourTable t1
INNER JOIN cte1 t2
ON t1.SalaryMonth = t2.SalaryMonth
)
SELECT t1.EmpID,
t1.SalaryMonth,
SUM(t2.Salary) AS Salary
FROM cte2 t1
INNER JOIN cte2 t2
ON t1.MonthPos >= t2.MonthPos
GROUP BY t1.EmpID,
t1.SalaryMonth
請添加預期的輸出。 –
@JackyMontevirgen請看上面的第二個格式化表格。這是預期的產出,是工資的滾動總和。 –
@TimBiegeleisen啊,我明白了。認爲它與樣本Data相同。 –