SQL累积总错误服务器2012
我正在尝试使用无界进动之间的行。。。方法按照 我正在运行MS Server 2012 查询使用在CTE[tbl2]中创建的表:SQL累积总错误服务器2012,sql,cumulative-sum,Sql,Cumulative Sum,我正在尝试使用无界进动之间的行。。。方法按照 我正在运行MS Server 2012 查询使用在CTE[tbl2]中创建的表: SELECT [RowID] , [GroupID] , [NumericalData] , Sum([NumericalData]) Over (Partition By [GroupID] order by [RowID] ROWS between UNBOU
SELECT [RowID]
, [GroupID]
, [NumericalData]
, Sum([NumericalData])
Over (Partition By [GroupID]
order by [RowID]
ROWS between UNBOUNDED PRECEDING and CURRENT ROW) as Cumulative
FROM TBL2
GROUP BY [ROWid]
, [groupID]
, [NumericalData]
Order By ROW
我收到以下错误消息:
消息102,第15级,状态1,第103行
“行”附近的语法不正确
有人知道我做错了什么吗
提前感谢SQL Server中的累积总和不需要该子句。此外:
- 您正在将
与窗口功能混合使用。虽然允许,但这可能不是你真正想要的分组依据
- 您的
无效订购人
SELECT [RowID], [GroupID], [NumericalData],
Sum([NumericalData]) Over (Partition By [GroupID] order by [RowID]) as Cumulative
FROM TBL2
ORDER BY [RowID];
编辑:
我想指出的是,原始查询(使用
orderby
子句修复)在中确实有效。可能问题在于SQL Server的版本。看起来除了最后一个group by/order by之外,它应该适合您。小组讨论真的有必要吗?是否有一个名为“行”的列?它看起来不像是在使用SQL Server 2012。select@@version
告诉你什么?我得到了Microsoft SQL Server 2008 R2(SP2)-10.50.4000.0(X64)2012年6月28日08:36:30版权所有(c)Windows NT 6.1上的Microsoft Corporation Express Edition(64位)(Build 7601:Service Pack 1)我正在笔记本电脑上使用Management Studio 2012,但服务器在2008年运行。所以它不会起作用。谢谢您的建议。如果您省略了行
子句,则使用默认值,即范围
。如果RowID
在每个GroupID
中不是唯一的,您将得到不同的结果。除非您真的想要范围产生的结果
,否则出于性能原因,您应该使用行
。@MikaelEriksson。我怀疑这个查询并不是OP真正想要的。通过数值进行聚合,然后将其包含在累积和中,这不是一个常见的操作。同意最后的group by子句不是他想要的,可能也不是order by,至少不是这样。我只是想指出,“SQL Server中的累积和不需要该子句。”这并不完全正确。它会对结果产生影响,也会对性能产生影响。我有一个制造流程中的加工时间列表,我正在尝试创建一个累积值,以便我可以执行进一步的计算。我现在有一个内部连接工作,所以有我需要的结果。谢谢你的帮助。