1

私は SQL Server 2014 を使用しています。システムで月ごとに行われた請求の合計を含むClaimsテーブルがあります。

+-----------+-------------+------------+
| Claim_ID  | Claim_Date  | Nett_Total |
+-----------+-------------+------------+
| 1         | 31 Jan 2012 |  321454.67 |
| 2         | 29 Feb 2012 |  523542.34 |
| 3         | 31 Mar 2012 |   35344.33 |
| 4         | 30 Apr 2012 |  142355.63 |
| etc.      | etc.        | etc.       |
+-----------+-------------+------------+

私が書いているレポートでは、各会計年度の開始時にゼロにリセットされる累計実行合計を作成できる必要があります (私の国では、これは翌年の 3 月 1 日から 2 月 28/29 日までです)。

レポートは表のようになりますが、追加の現在の合計列が次のようになります。

+-----------+-------------+------------+---------------+
| Claim_ID  | Claim_Date  | Nett_Total | Running Total |
+-----------+-------------+------------+---------------+
| 1         | 31 Jan 2012 |  321454.67 |     321454.67 |
| 2         | 29 Feb 2012 |  523542.34 |     844997.01 |
| 3         | 31 Mar 2012 |   35344.33 |      35344.33 | (restart at 0
| 4         | 30 Apr 2012 |  142355.63 |     177699.96 |  for new yr) 
| etc.      | etc.        | etc.       |               |
+-----------+-------------+------------+---------------+

私はウィンドウ関数が非常に強力であることを知っており、過去に基本的な方法でそれらを使用して、結果セットの行をグループ化する必要を避けながら全体の合計と平均を取得しました。各行が該当する現在の会計年度の現在の合計を取得するには、「前の」キーワードを使用する必要があるという直感がありますが、会計年度を概念として表現する方法を完全に理解することはできません'preceding' 句 (または、実際にこの方法で日付範囲を使用できる場合)。

「前の」条項の会計年度を「表現」する方法についての支援は、私にとって非常に役立ちます.

4

1 に答える 1

2

これを試してみるべきだと思います:

/* Create Table*/
CREATE TABLE dbo.Claims (
 Claim_ID int
,Claim_Date datetime
,Nett_Total decimal(10,2)
);

/* Insert Testrows*/
INSERT INTO dbo.Claims VALUES 
 (1, '20120101', 10000)
,(2, '20120202', 10000)
,(3, '20120303', 10000)
,(4, '20120404', 10000)
,(5, '20120505', 10000)
,(6, '20120606', 10000)
,(7, '20120707', 10000)
,(8, '20120808', 10000)

データのクエリ:

SELECT  Claim_ID, Claim_Date, Nett_Total, SUM(Nett_Total) OVER
(PARTITION BY YEAR(DATEADD(month,-2,Claim_Date)) ORDER BY Claim_ID) AS
[Running Total] FROM dbo.Claims

トリック:PARTITION BY YEAR(DATEADD(month,-2,Claim_Date))

年ごとの新しいパーティションですが、あなたの会計年度に合うように日付を変更します。

出力:

Claim_ID |Claim_Date                 |Nett_Total  |Running Total
---------+---------------------------+------------+-------------
1        |2012-01-01 00:00:00.000    |10000.00    |10000.00
2        |2012-02-02 00:00:00.000    |10000.00    |20000.00
3        |2012-03-03 00:00:00.000    |10000.00    |10000.00   <- New partition
4        |2012-04-04 00:00:00.000    |10000.00    |20000.00
5        |2012-05-05 00:00:00.000    |10000.00    |30000.00
6        |2012-06-06 00:00:00.000    |10000.00    |40000.00
7        |2012-07-07 00:00:00.000    |10000.00    |50000.00
8        |2012-08-08 00:00:00.000    |10000.00    |60000.00
于 2016-12-05T15:54:55.233 に答える