使用OVER()的“语法错误”错误()
问题描述:
我有一个月的每个交易日的销售预算。所以1天的预算是300,第2天的预算是400,然后月初至今的预算是700。我在查询得到这个错误:Incorrect syntax near 'ROWS'.
使用OVER()的“语法错误”错误()
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
答
您的查询正在各的总和当天的金额,同一天内的下一笔金额(您的分区和订单在同一个字段中)。这是允许的,但它表示三件事之一:
- TradingDate是一个日期,每个日期有多个值。如果是这样,那么这个总数是不确定的,因为你不知道哪一个会跟随。
- TradingDate名称很差,它确实是一个日期时间。在这种情况下,您将在同一日期获取下一个日期时间值。
- 您的查询是错误的,您并不真正的意思是“由TradingDate按TradingDate排序”。
我会推测你想要两件事之一。第一个是一天预算与第二天的总和。另一个是累计总和。
有可能您每天有多行,并且您希望当天的预算总和。如果是这样的话,那么你可以使用更简单的配方:
select TradingDate, Budget,
sum(Budget) over (PARTITION BY TradingDate) AS BudgetMTD
from #4
答
好吧,我想出了一个子查询解决方案:
select TradingDate, Budget,
RunningTotal = (select sum(Budget) from #4 s2
where s2.TradingDate<= s1.TradingDate)
from #4 s1
order by s1.TradingDate
即2012语法。您可能正在使用较早的版本。 (虽然你在那里也有一个无与伦比的',1)'。 –
是的,我使用2008年,感谢将调查 – Wilest
对于2008年见http://*.com/questions/860966/calculate-a-running-total-in-sqlserver –