sql - 如何编写SQL来级联累加行数据?

标签 sql sql-server

我在数据库中有一个工作计划如下。例如,第一行表示 A 团队在 6 月份有 10 小时的工作要做(SP1006)。

Team Sprint  WorkHours
A    1006    10
A    1007    20
A    1008    30
A    1009    40
B    1008    50
B    1009    60
B    1010    70

我想将其导出为以下形式来显示:每个月末,根据工作计划,还剩下多少个小时要做。正如您所看到的,派生表的字段也取决于原始数据表。

Team    SP1005  SP1006  SP1007  SP1008  SP1009  SP1010
A       100     90      70      40      0       0
B       180     180     180     130     70      0

我正在尝试在 SQL Server 2000 上执行此操作。这对我来说真的很难。有人可以提供一些帮助吗?非常感谢!

编辑:或者你可以忽略行到列的转换部分,(我知道怎么做),只关注累积部分。

最佳答案

对于累积部分use a cursor 。除非结果集非常小(可能要处理 <100 行),否则您可以使用三角形连接。

SELECT t1.Team, t1.Sprint,g.wh-SUM(t2.WorkHours)
 FROM tbl t1 JOIN tbl t2 ON t1.Team = t2.Team AND t2.Sprint <= t1.Sprint
 JOIN 
   (SELECT SUM(WorkHours) AS wh, Team  FROM tbl GROUP BY Team) g ON t1.Team=g.Team
 GROUP BY t1.Team, t1.Sprint,g.wh

但随着行数的增加,三角连接所需的工作量呈指数级增长。

关于sql - 如何编写SQL来级联累加行数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3447494/

相关文章:

mysql - 从连接表中提取信息的 SQL 查询

sql-server - 在 SQL Server 2008 中使用 STIntersects 的问题

MySQL错误1064但不是保留字

sql - MySQL 8 中不完整的执行计划

SQL Server 子字符串打破单词,而不是字符

sql - Oracle:获取除一行之外的所有行

sql-server - 优化 SQL Server 2005 的未知数?

SQL 查询在每列中返回相同的值

c# - 在使用 SQL 和 C# 时遇到问题

sql-server - SQL Server 中的encode(<columnName>, 'escape' ) PostgreSQL 等效项是什么?