Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:如何获得每个月的总付款额及其每月总付款额_Sql_Sql Server_Rollup - Fatal编程技术网

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

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

我需要得到每个月对应的数据。例如,我们将获得日期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 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)