sql运行总计
Posted
技术标签:
【中文标题】sql运行总计【英文标题】:sql running totals 【发布时间】:2017-09-18 11:27:45 【问题描述】:我有一张表格,上面列出了在某个截止日期之前要出售的物品和数量。 我正在尝试计算一个运行总列,该列将显示在某个特定时间会售出多少件商品。下面是我尝试获取运行总数的尝试,但它没有按我预期的那样工作。
select item, due_date, qty, sum(qty) over (Order by item )
from apsplan
Where item ='19-3102875'
order by item
我得到错误:
消息 102,级别 15,状态 1,第 44 行 'order' 附近的语法不正确。
ps 我使用的是 SQL Server 2012。
这是我从这里收到的替代建议
SELECT
item,
due_date,
qty,
(SELECT SUM(t2.qty) FROM apsplan t2 WHERE t2.item <= t1.item and item = '196-31020-005') AS rolling_qty
FROM apsplan t1
WHERE
item = '196-31020-005'
ORDER BY
item
这是结果 - 不是总和,而是结束
item due_date qty rolling_qty
196-31020-005 2017-09-20 00:59:00.000 1.00000000 24.00000000
196-31020-005 2017-10-06 01:00:00.000 1.00000000 24.00000000
196-31020-005 2017-11-06 01:00:00.000 1.00000000 24.00000000
196-31020-005 2017-12-06 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-01-28 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-02-04 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-03-25 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-03-25 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-04-01 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-04-08 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-04-29 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-05-06 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-05-13 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-05-27 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-06-03 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-06-10 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-07-01 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-07-08 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-07-15 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-07-29 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-08-05 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-08-12 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-08-26 01:00:00.000 1.00000000 24.00000000
196-31020-005 2019-09-02 01:00:00.000 1.00000000 24.00000000
【问题讨论】:
问题中的查询看起来不错。我没有看到任何语法错误。您是在显示您尝试运行的实际查询,还是一些缩减版本? 我同意弗拉基米尔的观点,执行得很好。由于它声明第 44 行,我怀疑这是更大查询的一部分,问题出在其他地方 @SEarle1986 这就是代码。我上面唯一的东西是在我来这里之前我正在玩的同一个查询的变体.....我已经注释掉了所有这些,这样将运行的唯一行就是我在这里发布的行 @user2355773 您确定错误与此代码有关吗?它报告第 44 行,您的代码行数较少。第二个奇怪的事情是它在 'order' 附近报告不正确的语法。请注意,它是小写的,但您在 over (Order by item ) 中的 Order 是大写。我试图引发类似的错误,如果我把它写成大写,Order 这个词会被报告为大写,所以也许这不是你正在考虑的一行? @user2355773 请用 SELECT @@version 的结果更新您的问题 【参考方案1】:评论太长了。
即使您使用的是 SQL Server 2012,实际功能也取决于兼容性级别。您可以使用以下方式查询兼容性级别:
SELECT name, compatibility_level FROM sys.databases
这应该至少为 110,以便您使用 order by
和 sum()
。要更改兼容性,请参阅documentation。如果您的兼容性较旧(可能需要少于 100 个),那么您可能会收到此错误。
【讨论】:
其实这不是真的。至少,对于 SQL Server 2014 Express。SUM(...) OVER (ORDER BY ...)
在我的测试中使用了兼容级别 100 的用户数据库。以上是关于sql运行总计的主要内容,如果未能解决你的问题,请参考以下文章