【发布时间】:2021-02-18 18:53:12
【问题描述】:
我需要获取每个对应数据的月份。例如,我们将从日期 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,所以 CUBE 和 PIVOT 不是选项...
【问题讨论】:
标签: sql sql-server rollup