Добавить непрерывный счет за предыдущий месяц - PullRequest
0 голосов
/ 17 января 2020

Есть ли способ добавить счет за предыдущие месяцы к следующему месяцу, например, в приведенной ниже таблице у января 17 и 29 февраля, мне нужно, чтобы февраль показал 46, а март - 46 плюс фактическое число с марта. Мне нужно следить за достигнутым прогрессом.

SELECT  ReviewType,
    Count(CASE MONTH(dateCompleted) WHEN 1 THEN ReviewType END) AS Jan,
    Count(CASE MONTH(dateCompleted) WHEN 2 THEN ReviewType END) AS Feb,
    Count(CASE MONTH(dateCompleted) WHEN 3 THEN ReviewType END) AS Mar,
    Count(CASE MONTH(dateCompleted) WHEN 4 THEN ReviewType END) AS Apr,
    Count(CASE MONTH(dateCompleted) WHEN 5 THEN ReviewType END) AS May,
    Count(CASE MONTH(dateCompleted) WHEN 6 THEN ReviewType END) AS Jun,
    Count(CASE MONTH(dateCompleted) WHEN 7 THEN ReviewType END) AS Jul,
    Count(CASE MONTH(dateCompleted) WHEN 8 THEN ReviewType END) AS Aug,
    Count(CASE MONTH(dateCompleted) WHEN 9 THEN ReviewType END) AS Sep,
    Count(CASE MONTH(dateCompleted) WHEN 10 THEN ReviewType END) AS Oct,
    Count(CASE MONTH(dateCompleted) WHEN 11 THEN ReviewType END) AS Nov,
    Count(CASE MONTH(dateCompleted) WHEN 12 THEN ReviewType END) AS Dec,
count(ReviewType) AS Result
FROM SQL1.dbo.qryPeakReviews 
GROUP BY ReviewType 

Output:

ReviewType  Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Result
    1   0   17  29  11  10  5   0   0   13  4   6   1   96
    2   0   2   20  5   4   3   0   3   6   5   0   0   48
    3   0   1   15  12  6   3   0   2   6   2   2   0   49

Ответы [ 2 ]

1 голос
/ 17 января 2020

так что вам нужна совокупная сумма, которую вы можете получить, например:

SELECT t1.ReviewType,
     (CASE MONTH(dateCompleted) WHEN 1 THEN SUM(count(t2.ReviewType)) END) AS Jan,
     (CASE MONTH(dateCompleted) WHEN 2 THEN SUM(count(t2.ReviewType)) END) AS Feb,
     (CASE MONTH(dateCompleted) WHEN 3 THEN SUM(count(t2.ReviewType)) END) AS Mar,
     (CASE MONTH(dateCompleted) WHEN 4 THEN SUM(count(t2.ReviewType)) END) AS Apr,
     (CASE MONTH(dateCompleted) WHEN 5 THEN SUM(count(t2.ReviewType)) END) AS May,
     (CASE MONTH(dateCompleted) WHEN 6 THEN SUM(count(t2.ReviewType)) END) AS Jun,
     (CASE MONTH(dateCompleted) WHEN 7 THEN SUM(count(t2.ReviewType)) END) AS Jul,
     (CASE MONTH(dateCompleted) WHEN 8 THEN SUM(count(t2.ReviewType)) END) AS Aug,
     (CASE MONTH(dateCompleted) WHEN 9 THEN SUM(count(t2.ReviewType)) END) AS Sep,
     (CASE MONTH(dateCompleted) WHEN 10 THEN SUM(count(t2.ReviewType)) END) AS Oct,
     (CASE MONTH(dateCompleted) WHEN 11 THEN SUM(count(t2.ReviewType)) END) AS Nov,
     (CASE MONTH(dateCompleted) WHEN 12 THEN SUM(count(t2.ReviewType)) END) AS Dec,

FROM SQL1.dbo.qryPeakReviews t1
INNER JOIN SQL1.dbo.qryPeakReviews t2 ON t1.ReviewType >= t2.ReviewType
GROUP BY t1.ReviewType, count(t1.ReviewType)
ORDER BY MONTH(dateCompleted)


Фактическая идея:

SELECT t1.id, t1.num, SUM(t2.num) as c_sum
FROM @t t1
INNER JOIN @t t2 on t1.id >= t2.id
GROUP BY t1.id, t1.num
ORDER BY t1.id

Вывод

| id | num      |c_sum|
-----------------------
|  1 |        5 |  5 |
|  2 |        7 |  12 |
|  3 |        3 |  15 |
|  4 |       15 |  30 |
|  5 |       20 |  50 |
1 голос
/ 17 января 2020

Это проще с нормализованным набором данных:

WITH Counts AS(
    SELECT ReviewType,
           MONTH(dateCompleted) AS MonthNo,
           DATENAME(MONTH,dateCompleted) AS MonthName,
           COUNT(1) AS Total
    FROM dbo.qryPeakReviews
    GROUP BY ReviewType,
             MONTH(dateCompleted))
SELECT ReviewType,
       MonthName,
       SUM(Total) OVER (ORDER BY MonthNo ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS RunningTotal
FROM Counts
ORDER BY MonthNo;

Если вы должны иметь ненормализованный набор данных, вам просто нужно немного изменить кросс-таблицу:

SELECT ReviewType,
       COUNT(CASE WHEN MONTH(dateCompleted) <= 1 THEN ReviewType END) AS Jan,
       COUNT(CASE WHEN MONTH(dateCompleted) <= 2 THEN ReviewType END) AS Feb,
       COUNT(CASE WHEN MONTH(dateCompleted) <= 3 THEN ReviewType END) AS Mar,
       COUNT(CASE WHEN MONTH(dateCompleted) <= 4 THEN ReviewType END) AS Apr,
       COUNT(CASE WHEN MONTH(dateCompleted) <= 5 THEN ReviewType END) AS May,
       COUNT(CASE WHEN MONTH(dateCompleted) <= 6 THEN ReviewType END) AS Jun,
       COUNT(CASE WHEN MONTH(dateCompleted) <= 7 THEN ReviewType END) AS Jul,
       COUNT(CASE WHEN MONTH(dateCompleted) <= 8 THEN ReviewType END) AS Aug,
       COUNT(CASE WHEN MONTH(dateCompleted) <= 9 THEN ReviewType END) AS Sep,
       COUNT(CASE WHEN MONTH(dateCompleted) <= 10 THEN ReviewType END) AS Oct,
       COUNT(CASE WHEN MONTH(dateCompleted) <= 11 THEN ReviewType END) AS Nov,
       COUNT(CASE WHEN MONTH(dateCompleted) <= 12 THEN ReviewType END) AS Dec,
       COUNT(ReviewType) AS Result
FROM dbo.qryPeakReviews 
GROUP BY ReviewType;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...