Сумма SQL накапливается и не накапливается в одном запросе - PullRequest
0 голосов
/ 20 июня 2011

Привет, мне было интересно, есть ли способ получить кумулятивный и не кумулятивный итог в одном запросе. У меня есть таблица со следующими полями: Отдел, SalesPerson, fin_month, деятельность, стоимость

То, что я хотел бы иметь, - это две суммы: одна даст ежемесячную сумму для продавца, а другая даст итоговую сумму за год У меня проблема с установкой двух разных критериев, чтобы заставить его работать.

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 20 июня 2011

В этом решении используются CTE , рекурсия и ранжирование для получения совокупных итогов для каждого fin_month за SalesPerson в каждом Department на соответствующие месячные итоги.

;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
0 голосов
/ 20 июня 2011

Хотелось бы что-нибудь подобное?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...