SQL: 如何获取每个月的总付款及其每月总额

SQL: How to get the total payment for each month and its monthly total

我需要获取每个对应数据的月份。例如,我们将从日期 2020-01-08(YYYY-MM-DD) 开始获取月份。 SELECT EXTRACT(MONTH FROM "2020-01-08") 似乎只能从指定的日期获取,但我想要的很好,一次从行中获取所有月份。

我将大部分使用 ROLLUP 子条款,但对于那些不知道那是什么的人:

SELECT COALESCE(Brand, 'GrandTotal') AS Brand, SUM(Price) as 'TotalAmount'
FROM Purchase_Items
GROUP BY ROLLUP (Brand)

顺便说一句,COALESCE 将 NULL 重命名为 GrandTotal,SUM 将 Price 行中的所有数据相加。所以它会像这样出现(带有给出的样本数据):

Brand              TotalAmount
-------------------------------
Apple              410000
Huawei             180000
Samsuing           261000
Xiaomi             110000
GrandTotal         961000

我的下一个结果必须看起来更像这样:

Month              Brand              TotalAmount
--------------------------------------------------
1                  Samsung            141000
1                  Monthly Total      141000
2                  Apple              170000
2                  Monthly Total      170000
3                  Huawei             135000
3                  Xiaomi             10000
3                  Monthly Total      145000
4                  Apple              70000
4                  Xiaomi             70000
4                  Monthly Total      140000
5                  Apple              170000
5                  Huawei             45000
5                  Samsung            120000
5                  Xiaomi             30000
5                  Monthly Total      365000
NULL               Grand Total        961000

它所做的是获取所有产品的价格,将它们相加并根据购买日期的月份进行相应排序。听起来很简单,我不知道如何在 Google 或其他常见问题解答上搜索这个想法,所以我别无选择,只能在这里提出这样的问题。我希望它不会像看起来那样误导或不清楚。

此外,我只被建议只使用 ROLLUP,所以 CUBEPIVOT不是选项...

您似乎想要:

SELECT MONTH(<datecol>),
       (CASE WHEN MONTH(<datecol>) IS NULL AND Brand IS NULL
             THEN COALESCE(Brand, 'Grand Total')
             WHEN Brand IS NULL THEN 'Month Total'
             ELSE Brand
        END) AS Brand,
       SUM(Price) as TotalAmount
FROM Purchase_Items
GROUP BY ROLLUP (MONTH(<datecol>), Brand)