【发布时间】:2018-12-13 18:54:43
【问题描述】:
我有一些关于分区函数的代码,但它不起作用。
我收到一条错误消息,上面写着
“销售”附近的语法不正确
有人知道为什么吗?看了其他分区问题,没找到答案,
代码(如下)应该从 Aggregated Sales History 表中选择 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 将结果划分为分区,例如 Zones)
如果您能发布带有正确答案的代码,我们将不胜感激!
【问题讨论】:
-
你的错误是什么?预期结果?样本数据?为什么你想要所有列的总和?这可能是您的错误所在
-
你的问题是你选择的别名,特别是
AS Total Sales。列的别名/名称不能包含空格或其他特殊字符,除非别名/名称被引用:AS [Total Sales]但是,理想情况下,不要在对象名称、别名中使用特殊字符。 CamelCase 完全可以接受:AS TotalSales -
您好 Thomas,感谢您的及时回复。我收到一条错误消息 - “销售”附近的语法不正确。使用分区函数编写查询的更好方法是什么?你能给些建议么? TIA。
-
SUM(Sales) OVER (PARTITION BY PriceZoneID) AS TotalSalesByZone 。它也会抛出错误。因为分区需要按列排序。
-
@saravanatn 不,它没有。在
SUM() (PARTITION BY...)上添加ORDER BY将导致SUM成为“运行总数”,而不是累积总数。
标签: sql sql-server window-functions