2015-09-28 67 views
0

我已經閱讀了關於累積和的一些帖子,但是我一直在努力與SUM OVER或其他累積和,加入相同的數據使用< =內部的一部分加入,所以我正在尋找一些澄清。SQL Server多個累積總和(2012或更高版本)

我從財務數據以下列:

AccountID, 
FiscalYear, 
FiscalQuarter, 
FiscalPeriod, 
PeriodType (we report on calendar and fiscal periods), 
CurrencyType (source or functional currency), 
DataSet (actual or budgeted data), 
Currency (the currency of the transaction, 
PeriodAmount 

此信息目前期行格式總結,所以我工會的數據一起得到它以表格格式,然後嘗試獲得運行累計季度和年度的總計。例如:

如果我的數據是(現在我假定貨幣和其他領域不apearring是相同的,但它們可能會有所不同):

ACCTID FYear FQuarter FPeriod PAmount 
123 2015 1  1  $100 
123 2015 1  2  $100 
123 2015 1  3  $100 
123 2015 2  4  $100 

我的數據的結果我想應該是:

123, 2015, 1, 1, $100, $100 (cumulative quarter), $100 (cumulative year) 
123, 2015, 1, 2, $100, $200 (cumulative quarter), $200 (cumulative year) 
123, 2015, 1, 3, $100, $300 (cumulative quarter), $300 (cumulative year) 
123, 2015, 2, 4, $100, $100 (cumulative quarter), $400 (cumulative year) 

它似乎想,當我做SUM OVER(PARTITION BY AccountID, FYear, FQuarter)我得到的每一個結果$ 300 1季度或當我SUM OVER(PARTITION BY AccountID, FYear)我總是得到$ 400每個記錄。

我在百萬以上的記錄上這樣做,所以我願意接受建議。

回答

0
SELECT SUM(AMOUNT) Over (Partition BY FiscalQuarter Order BY FiscalQuarter) 
FROM Table_name 
+0

請考慮向您的代碼添加一些解釋其他代碼只有答案不夠。 – Rahul

0

我想你正在尋找的是這樣的:

SELECT ACCTID, FYear, FQuarter, FPeriod, PAmount, 
     SUM(PAmount) OVER (PARTITION BY ACCTID, FYear, FQuarter 
          ORDER BY FPeriod) AS rtQuarter, 
     SUM(PAmount) OVER (PARTITION BY ACCTID, FYear 
          ORDER BY FPeriod) AS rtYear 
FROM mytable 

什麼決定在OVER子句的運行總計爲ORDER BY

因此,在每個ACCTID, FYear, FQuarter切片內計算上述查詢返回的第一個運行總數,即rtQuarter。只要FQuarter值更改運行總計被重置。

第二運行總數,即rtYear,按照ACCTID, FYear計算。 PAmount值增加爲FPeriod增加。

Demo here

+0

該分區的工作正常,但一旦我按順序添加它給我一個錯誤的語法附近的'順序'錯誤消息。我正在使用SQL Server 2012版本11.0.5058.0。我確定在我的查詢中沒有問題,因爲只要我通過它刪除訂單就行。 – Ian

+0

啊我現在看到,雖然兼容性級別是2005 90 – Ian

+0

@Ian但是你在問題的主題中提到'2012或更高版本'。 –

0

你錯過OVER條款的一部分。爲了計算累計總數,您需要通過以下方式添加訂單:

SUM(amount) OVER(PARTITION BY AccountID, FYear ORDER BY FQuarter, FPeriod)