Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未来几年的总金额mssql_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

未来几年的总金额mssql

未来几年的总金额mssql,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有一个问题 我有这个订单表: workerID orderID Year orderCount 274 869 2008 14 274 758 2006 2 274 770 2006 13 274 853 2006 10 我需要创建如下表: workerID orderID Year orderCount sumByYears 274 2005 30 (orderCount for y

我有一个问题

我有这个订单表:

workerID orderID Year orderCount
274      869     2008   14
274      758     2006    2
274      770     2006   13
274      853     2006   10
我需要创建如下表:

workerID orderID Year orderCount sumByYears
274      2005     30 (orderCount for year 2005)
274      2006    880 (orderCount for year 2005+2006)
274      2007   1456 (orderCount for year 2005+2006+2007)
274      2008    729 (...)
编写此查询对我来说很容易:

SELECT workerID , Year , SUM(orderCount) 
FROM Orders
GROUP BY workerID , Year 
ORDER BY workerID , Year ;

但我不知道如何获得最后一列

假设您需要一个文本字符串,则应该这样做:

SELECT workerID , Year , SUM(orderCount), '(orderCount for year' + Year + ')'
FROM Orders
GROUP BY workerID , Year 
ORDER BY workerID , Year ;
如果您真正想要的是订单数量的滚动总和,那么我相信这应该是可行的:

   SELECT workerID 
    , Year 
    , SUM(orderCount)
    , (SELECT SUM(orderCount)
        FROM Orders As runningORders
        WHERE runningOrders.Year <= Orders.Year         
    ) As SumByYears
FROM Orders
GROUP BY workerID , Year 
ORDER BY workerID , Year ;
下面是一个示例

试试这个:

SELECT workerID , Year , 
SUM(orderCount), '(orderCount for year' + Year + ')'
FROM Orders
GROUP BY workerID , Year 
ORDER BY workerID , Year ;

你想要的通常被称为连续总数。在SQL Server 2012中,可以使用SUM OVER进行计算

SELECT
  workerID,
  Year,
  orderCount = SUM(orderCount),
  sumByYears = SUM(SUM(orderCount)) OVER (PARTITION BY workerID ORDER BY Year) 
FROM Orders
GROUP BY workerID , Year 
ORDER BY workerID , Year ;
请在此处阅读有关OVER条款的更多信息:


什么版本的SQL Server?第二个查询是我需要的,但是我在关键字“WHERE”附近得到了不正确的语法。我现在正在努力更正此查询操作,我认为应该在小组之前立即更新WHERE。当然,很抱歉我没有注意到。但现在我看到了这一点:当子查询未引入时,只能在选择列表中指定一个表达式。将子选择更改为,从Orders中选择SUMorderCount作为runningORders,其中runningORders。现在我认为GROUP BY是错误的子查询返回了超过1个值。当子查询在=、!=、=或者当子查询用作表达式时。如果我删除了GROUP BY,我得到了错误的和,因为30+880=910查找表的例子,我得到了72766,这个值在2007年的所有时间重复,这正是我需要的。谢谢大家的帮助。我爱你-