【问题标题】:Error "Incorrect syntax near 'order'" in partition over clausepartition over 子句中的错误“'order' 附近的语法不正确”
【发布时间】:2016-02-11 15:17:06
【问题描述】:

是什么导致了这个错误?

SQL Server 2005 中,我收到错误'order' 附近的语法不正确。我已将错误隔离到OVER clause(当我删除“over”子句中的“order by”时,错误消失了)。我查看了文档并搜索了解决方案,但找不到问题所在。

SELECT bill.[cust_id], MONTH(bill.[del_date]), YEAR(bill.[del_date]),
   SUM(SUM(ISNULL(bill.[sum_count], 0))) OVER (PARTITION BY bill.[cust_id]
   ORDER BY YEAR(bill.[del_date]), MONTH(bill.[del_date])) AS QtyProcessed
FROM EnvelopeBilling bill
WHERE bill.[cust_id] = 1721
  AND bill.[del_date] BETWEEN '5/1/2015' AND '10/31/2015'
GROUP BY bill.[cust_id], MONTH(bill.[del_date]), YEAR(bill.[del_date])
ORDER BY bill.[cust_id], YEAR(bill.[del_date]), MONTH(bill.[del_date])

【问题讨论】:

  • SUM() OVER () 没有订单... (1+2) == (2+1)
  • 您不能将SUMOVERPartition by..Orderby 一起使用,只能与PARTITION BY 一起使用。
  • 他可以在sql servr 2012+中使用sum和ordering
  • 当我删除订单时,我得到的是请求时间段内所有月份的总和,而不是每个月的总和。我如何获得每个月的小计? (我被 2005 年困住了)
  • 我删除了订单,并添加了年份和月份作为分区的一部分,它起作用了。 "PARTITION BY bill.cust_id, YEAR(bill.del_date), MONTH(bill.del_date)"

标签: tsql sql-server-2005


【解决方案1】:

如果 'partition by' 与 'group by' 相同,你应该可以只删除分区

SELECT bill.[cust_id] , MONTH(bill.[del_date]), YEAR(bill.[del_date]),
       SUM(ISNULL(bill.[sum_count], 0)) AS QtyProcessed
  FROM EnvelopeBilling bill
 WHERE bill.[cust_id]= 1721
   AND bill.[del_date] BETWEEN '5/1/2015' AND '10/31/2015'
 GROUP BY bill.[cust_id], YEAR(bill.[del_date]), MONTH(bill.[del_date])
 ORDER BY bill.[cust_id], YEAR(bill.[del_date]), MONTH(bill.[del_date])

【讨论】:

  • 我在测试之前标记了它(我的错)。我收到错误“无法对包含聚合或子查询的表达式执行聚合函数”。 --请参阅我在原始帖子中的最后一条评论以获得有效的答案。
【解决方案2】:

您不能将SUMOVERPartition by..Orderby 一起使用,只能与PARTITION BY 一起使用。订购您想要求和的东西是没有意义的。

SELECT bill.[cust_id], 
       Month(bill.[del_date]), 
       Year(bill.[del_date]), 
       Sum(Sum(Isnull(bill.[sum_count], 0))) 
         OVER (partition BY bill.[cust_id]) AS QtyProcessed 
FROM   envelopebilling bill 
WHERE  bill.[cust_id] = 1721 
       AND bill.[del_date] BETWEEN '5/1/2015' AND '10/31/2015' 
GROUP  BY bill.[cust_id], 
          Month(bill.[del_date]), 
          Year(bill.[del_date]) 
ORDER  BY bill.[cust_id], 
          Year(bill.[del_date]), 
          Month(bill.[del_date]) 

【讨论】:

  • 他实际上可以,但从 2012 年开始。运行总和就是这个结果。 sqlfiddle.com/#!6/023988/1
  • 不知道为什么这被否决了。问题不清楚不是你的错。 +1
  • 因为It doesnt make sense to order something that you want to sum.而投反对票。请参阅我提供的小提琴。
猜你喜欢
  • 1970-01-01
  • 2013-07-07
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多