お手伝いを致しますこのお試しください:あなたは真剣標準のSQL Serverの日付またはタイムスタンプ列を使用してSalaryMonth
を表す検討すべきです。文字列の月の名前を使用すると、あらゆる種類の問題が発生するので、私の冗長な答えは以下のとおりです。
私のアプローチは、各月の名前(cte1
)に数値の位置を割り当てるためにCTEを使用することです。次に、私はあなたの元のテーブル(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第2のフォーマットされた表を見てください。これは予想される成果であり、給与の回転合計です。 –
@TimBiegeleisenああそうです。サンプルのデータと同じことを考えました。 –