使用OVER()的“语法不正确”错误

时间:2012-10-31 13:20:48

标签: sql sql-server tsql

我有一个月的每个交易日的销售预算。因此,对于第1天,预算为300,第2天预算为400,然后月初预算为700.我在查询中收到此错误:Incorrect syntax near 'ROWS'.

select 
TradingDate
,Budget
,sum(Budget) over (PARTITION BY TradingDate
order by TradingDate asc
ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING),1) AS BudgetMTD
from #4

2 个答案:

答案 0 :(得分:2)

您的查询将获取每天金额的总和,以及同一天内的下一个金额(您的分区和排序依据在同一个字段中)。这是允许的,但它意味着三件事之一:

  1. TradingDate是一个日期,每个日期都有多个值。如果是这样,总和是不确定的,因为你不知道会跟随哪一个。
  2. TradingDate命名不佳,实际上是一个约会时间。在这种情况下,您将获得同一日期的下一个日期时间值。
  3. 您的查询是错误的,您并不是指“按TradingDate按照TradingDate订单进行分区”。
  4. 我猜想你想要两件事之一。第一天是第一天的预算与第二天的总和。另一个是累积金额。

    您可能每天有多行,并且希望获得当天预算的总和。如果是这种情况,那么您可以使用更简单的公式:

    select TradingDate, Budget,
           sum(Budget) over (PARTITION BY TradingDate) AS BudgetMTD
    from #4
    

答案 1 :(得分:2)

好的我想出了一个子查询解决方案:

select TradingDate, Budget,
RunningTotal = (select sum(Budget) from #4 s2
where s2.TradingDate<= s1.TradingDate)
from #4 s1
order by s1.TradingDate