未来几年的总金额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年的所有时间重复,这正是我需要的。谢谢大家的帮助。我爱你-