Sql 分区上的和不起作用

Sql 分区上的和不起作用,sql,sql-server,window-functions,Sql,Sql Server,Window Functions,我有一些关于配分函数的代码,但它不起作用 我收到一条错误消息,上面写着 “Sales”附近的语法不正确 有人知道为什么吗?我看了其他分区问题,没有找到答案 下面的代码应该从聚合销售历史记录表中选择PriceZoneID和Sales,然后使用OVER函数汇总总销售额,并将该数据放入名为total Sales的新列中 然后,它应该在名为TotalSalesByZone的新列中使用OVER-PARTITION表达式对每个分区的销售额进行汇总,然后按价格分区ID和销售额对数据进行排序 Select Pr

我有一些关于配分函数的代码,但它不起作用

我收到一条错误消息,上面写着

“Sales”附近的语法不正确

有人知道为什么吗?我看了其他分区问题,没有找到答案

下面的代码应该从聚合销售历史记录表中选择PriceZoneID和Sales,然后使用OVER函数汇总总销售额,并将该数据放入名为total Sales的新列中

然后,它应该在名为TotalSalesByZone的新列中使用OVER-PARTITION表达式对每个分区的销售额进行汇总,然后按价格分区ID和销售额对数据进行排序

Select PriceZoneID, 
    Sales,
SUM(Sales) OVER () AS Total Sales, 
SUM(Sales) OVER (PARTITION BY PriceZoneID) AS TotalSalesByZone
From AggregatedSalesHistory
ORDER BY PriceZoneID AND Sales; 
Partition By将结果划分为分区,例如分区


如果您能发布正确答案的代码,将不胜感激

现在从评论中出来,因为更正其中的错误有点愚蠢。代码中有1个输入错误和1个语法错误:

Select PriceZoneID, 
       Sales,
       SUM(Sales) OVER () AS Total Sales, --There's a space in the alias
       SUM(Sales) OVER (PARTITION BY PriceZoneID) AS TotalSalesByZone
FROM AggregatedSalesHistory
ORDER BY PriceZoneID AND Sales; --AND is not valid in an ORDER BY clause
正确的查询是:

Select PriceZoneID, 
       Sales,
       SUM(Sales) OVER () AS TotalSales, --Removed Space
       SUM(Sales) OVER (PARTITION BY PriceZoneID) AS TotalSalesByZone
FROM AggregatedSalesHistory
ORDER BY PriceZoneID, Sales; --Comma delimited

现在从评论中出来,因为纠正其中的错误有点愚蠢。代码中有1个输入错误和1个语法错误:

Select PriceZoneID, 
       Sales,
       SUM(Sales) OVER () AS Total Sales, --There's a space in the alias
       SUM(Sales) OVER (PARTITION BY PriceZoneID) AS TotalSalesByZone
FROM AggregatedSalesHistory
ORDER BY PriceZoneID AND Sales; --AND is not valid in an ORDER BY clause
正确的查询是:

Select PriceZoneID, 
       Sales,
       SUM(Sales) OVER () AS TotalSales, --Removed Space
       SUM(Sales) OVER (PARTITION BY PriceZoneID) AS TotalSalesByZone
FROM AggregatedSalesHistory
ORDER BY PriceZoneID, Sales; --Comma delimited


你的错误是什么?预期结果?样本数据?为什么所有列都要求和?这很可能是您的错误所在您的问题在于您选择的别名,特别是总销售额。列的别名/名称不能包含空格或其他特殊字符,除非别名/名称被引用:但是,理想情况下,不要在对象名称、别名中使用特殊字符。CamelCase完全可以接受:作为TotalSalesHi Thomas,感谢您的及时回复。我得到一个错误,上面写着“Sales”附近的语法不正确。有什么更好的方法来编写查询而不是使用分区函数呢?你能给个建议吗?TIA.SUMSales按PriceZoneID划分为TotalSalesByZone。它也会抛出错误。因为分区需要按某列排序。@saravanatn不,它不需要。在和分区上添加ORDER BY。。。将导致总和为运行总数,而不是累计总数。您的错误是什么?预期结果?样本数据?为什么所有列都要求和?这很可能是您的错误所在您的问题在于您选择的别名,特别是总销售额。列的别名/名称不能包含空格或其他特殊字符,除非别名/名称被引用:但是,理想情况下,不要在对象名称、别名中使用特殊字符。CamelCase完全可以接受:作为TotalSalesHi Thomas,感谢您的及时回复。我得到一个错误,上面写着“Sales”附近的语法不正确。有什么更好的方法来编写查询而不是使用分区函数呢?你能给个建议吗?TIA.SUMSales按PriceZoneID划分为TotalSalesByZone。它也会抛出错误。因为分区需要按某列排序。@saravanatn不,它不需要。在和分区上添加ORDER BY。。。将导致总数为运行总数,而不是累计总数。好的,谢谢整理。我很感激。当我运行整理后的代码时,我现在得到一个错误,该错误显示无效的对象名“AggregatedSalesHistory”。你知道那可能意味着什么吗?@Mr2017它的意思正是它所说的;对象AggregatedSalesHistory不存在。我假设您提供的SQL中的对象名称是正确的。我不能帮你更正这个名字,因为我不知道它叫什么。您需要更正名称。实际上,屏幕左上角有一个下拉部分,其中默认选项为“Master”-当我将其更改为包含聚合销售历史表的PS55数据库时,查询成功。我需要了解是否可以将默认数据库从“Master”更改为“PS55”,因为这很容易忘记。您可以将默认数据库更改为登录是。但是,如果您在SSMS中工作,通常最好使用[您的数据库名称];一开始,;只是为了确认一下。现在查询正在运行!!万岁!谢谢你的帮助!我现在唯一的疑问是它会反复返回相同的结果。好的,谢谢你整理。我很感激。当我运行整理后的代码时,我现在得到一个错误,该错误显示无效的对象名“AggregatedSalesHistory”。你知道那可能意味着什么吗?@Mr2017它的意思正是它所说的;对象AggregatedSalesHistory不存在。我假设您提供的SQL中的对象名称是正确的。我不能帮你更正这个名字,因为我不知道它叫什么。您需要更正名称。实际上,屏幕左上角有一个下拉部分,其中默认选项为“Master”-当我将其更改为包含聚合销售历史表的PS55数据库时,查询成功。我需要确定是否可以从更改默认数据库
“Master”改为“PS55”,因为这很容易忘记。您可以将默认数据库更改为“yes”。但是,如果您在SSMS中工作,通常最好使用[您的数据库名称];一开始,;只是为了确认一下。现在查询正在运行!!万岁!谢谢你的帮助!我现在唯一的疑问是,它重复返回相同的结果。