SQL:如何获得每个月的总付款额及其每月总付款额
我需要得到每个月对应的数据。例如,我们将获得日期2020-01-08(YYYY-MM-DD)之后的月份。似乎SELECT EXTRACT(从“2020-01-08”开始的月份)只从指定的日期获取,但我想要的是,一次从行获取所有月份 我将在大部分情况下使用汇总子条款,但对于那些不知道这是什么的人:SQL:如何获得每个月的总付款额及其每月总付款额,sql,sql-server,rollup,Sql,Sql Server,Rollup,我需要得到每个月对应的数据。例如,我们将获得日期2020-01-08(YYYY-MM-DD)之后的月份。似乎SELECT EXTRACT(从“2020-01-08”开始的月份)只从指定的日期获取,但我想要的是,一次从行获取所有月份 我将在大部分情况下使用汇总子条款,但对于那些不知道这是什么的人: SELECT COALESCE(Brand, 'GrandTotal') AS Brand, SUM(Price) as 'TotalAmount' FROM Purchase_Items GROUP
SELECT COALESCE(Brand, 'GrandTotal') AS Brand, SUM(Price) as 'TotalAmount'
FROM Purchase_Items
GROUP BY ROLLUP (Brand)
顺便说一下,COALESCE将NULL重命名为GrandTotal,SUM将Price行中的所有数据相加。因此结果如下(给出了样本数据):
我的下一个结果必须看起来更像这样:
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
它所做的是获取所有产品的价格,将它们相加,并根据购买日期起的月份进行排序。听起来很简单,但我不知道如何在谷歌或其他常见问题上搜索这个想法,所以我别无选择,只能在这里问这样一个问题。我希望它不像看上去那样误导人或不清楚
另外,我建议只使用汇总,因此立方体和枢轴不是选项…您似乎想要:
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)
SELECT MONTH(),
(月份()为空且品牌为空时的情况)
然后合并(品牌“总计”)
当品牌为空时,则为“月总数”
ELSE品牌
(完)作为品牌,,
合计金额(价格)
从购买物品
按汇总分组(月份(),品牌)
等等,那是。。。它有什么作用?编辑:啊,我刚刚用列的名称替换了,hahaYou应该使用函数,例如,更新-注意,它使用相同的数据集和方法(但使用的是多维数据集而不是汇总)。我可能会对多维数据集部分使用这个GROUPING()函数,所以感谢大家的提醒,@seanb
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)