无法在SQL Server 2008中的分区中使用ORDER BY的解决方案

时间:2019-07-08 13:07:18

标签: sql sql-server sql-server-2008

我有以下查询在SQL Server 2012上运行良好:

   SELECT Name, 
     WeekNumber,
     SUM(NumberOfSecondsWorked) AS totalDaily,
     StartTime,
     EndTime,
     SUM(SUM(NumberOfSecondsWorked)) OVER (PARTITION BY WeekNumber ORDER BY EndTime) AS totalWeekly 
   FROM #temp AS T1

但是不幸的是,当在SQL Server 2008 DB上运行此查询时,出现以下错误:

Incorrect syntax near 'order'.

我对上述查询的期望结果是每周增加NumberOfSecondsWorked by Day。这是我想要的输出:

enter image description here

但是如果没有ORDER BY,我只得到每周的总数,而没有按天递增:

enter image description here

有人知道如何在SQL Server 2008中运行上述查询吗?还是获得相同结果的机制?谢谢!

2 个答案:

答案 0 :(得分:3)

SQL Server 2008不支持累积和。我的建议是升级到受支持的SQL Server版本。

也就是说,您可以使用相关子查询或横向联接(即apply)来实现此目的:

SELECT t.*,
       (SELECT SUM(t2.totalDaily)
        FROM #temp t2
        WHERE t2.WeekNumber = t.WeekNumber AND
              t2.EndTime <= t.EndTime
       ) as running_weekly
FROM #temp t2

答案 1 :(得分:0)

我建议您阅读以下文章:https://dba.stackexchange.com/questions/47116/in-microsoft-sql-server-2008-syntax-generates-the-error-the-parallel-data-ware

它说明直到SQL2012才支持您要执行的操作。 您可以使用同事建议的解决方法,但是最好的解决方案是迁移到支持您要执行的操作的sql server版本。 再见 西蒙妮(Simone)