2011-06-20 247 views
0

嗨我在想,是否有辦法在同一查詢中獲得累計和非累計總計。我有一張桌子,裏面有以下字段: 部門,銷售人員,fin_month,活動,成本SQL在同一查詢中累計和非累計總計

我想要的是有兩個款項,一個會給銷售員一個月的總額,另一個給出一年的總額。我遇到了一個問題,設置兩個不同的標準來使其工作。

很多謝謝

+0

我在這裏待了大約一個小時,然後纔看到這個,並在5分鐘內完成。 http://stackoverflow.com/questions/2120544/how-to-get-cumulative-sum – smoore4

回答

0

會這樣的幫助嗎?

SELECT 
* 
FROM 
(
SELECT 
Department, SalesPerson 
, SUM(fin_month) SalesPerson_Sum 
FROM 
[TABLE_NAME] 
GROUP BY Department, SalesPerson 
) a 
INNER JOIN 
(
SELECT 
    Department 
, SUM(fin_month) AS Department_Sum 
    FROM 
[TABLE_NAME] 
GROuP BY 
    Department 
) b 
ON 
a.Department = b.Department 
0

此解決方案使用CTEsrecursion,和ranking在每一個Department基於相應的每月總獲得用於每fin_monthSalesPerson累積總數。

;WITH 
    monthlytotals AS (
    SELECT 
     Department, 
     SalesPerson, 
     fin_month, 
     MonthlyTotal = SUM(cost), 
     rn = ROW_NUMBER() OVER (PARTITION BY Department, SalesPerson 
            ORDER BY fin_month) 
    FROM atable 
    GROUP BY Department, SalesPerson, fin_month 
), 
    alltotals AS (
    SELECT 
     Department, 
     SalesPerson, 
     fin_month, 
     MonthlyTotal, 
     CumulativeTotal = MonthlyTotal, 
     rn 
    FROM monthlytotals 
    WHERE rn = 1 
    UNION ALL 
    SELECT 
     m.Department, 
     m.SalesPerson, 
     m.fin_month, 
     m.MonthlyTotal, 
     CumulativeTotal = a.CumulativeTotals + m.MonthlyTotal, 
     m.rn 
    FROM monthlytotals m 
     INNER JOIN alltotals a 
     ON m.Department = a.Department 
     AND m.SalesPerson = a.SalesPerson 
     AND m.rn = a.rn + 1 
) 
SELECT 
    Department, 
    SalesPerson, 
    fin_month, 
    MonthlyTotal, 
    CumulativeTotal 
FROM alltotals