9

我有一个每月每个交易日的销售预算。因此,第 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
4

2 回答 2

2

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

select TradingDate, Budget,
RunningTotal = (select sum(Budget) from #4 s2
where s2.TradingDate<= s1.TradingDate)
from #4 s1
order by s1.TradingDate
于 2012-11-01T07:37:49.017 回答
2

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

  1. TradingDate 是一个日期,每个日期都有多个值。如果是这样,总和是不确定的,因为你不知道会跟随哪一个。
  2. TradingDate 名称不好,它实际上是一个日期时间。在这种情况下,您将在同一日期获得下一个日期时间值。
  3. 您的查询格式错误,您并不是真正的意思是“按 TradingDate 分区 order by TradingDate”。

我推测你想要两件事之一。第一个是一天的预算与第二天的预算之和。另一个是累积总和。

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

select TradingDate, Budget,
       sum(Budget) over (PARTITION BY TradingDate) AS BudgetMTD
from #4
于 2012-10-31T16:05:26.523 回答