多组合条件分组汇总
MSSQL 数据库某表如下,其中 id 时关键字:
from |
to |
value |
id |
start_row |
end_row |
A |
B |
20 |
1 |
1 |
|
C |
D |
30 |
2 |
2 |
|
B |
C |
100 |
3 |
3 |
|
E |
A |
50 |
4 |
4 |
|
A |
D |
70 |
5 |
1 |
5 |
C |
A |
20 |
6 |
2 |
6 |
现在要先过滤出 start_row 和 end_row 都不为 null 的记录,再针对找到的每条记录进行计算,找到表中 id 在 本记录的 start_row 和 end_row 之间,且 from 或 to 等于本记录的 from 的那些记录,再对这些记录的 value 求和。
id |
sumvals |
5 |
140 |
6 |
150 |
编写SPL代码
A |
|
1 |
=mssql.query("select * from tb") |
2 |
=A1.select(start_row && end_row) |
3 |
=A2.new(id,A1.select(id>= A2.start_row && id<=A2.end_row && (from==A2.from || to==A2.from)).sum(value):sumvals) |
A1:通过 JDBC 查询数据库。
A2:过滤出 start_row 和 end_row 都不为 null 的记录,即第 5 第 6 条。&& 表示逻辑与。
A3:根据 A2 新建二维表,第 1 个字段取自 id,第 2 个字段的计算方法是:找到 A1 中 id 在当前记录的 start_row 和 end_row 之间,且 from 或 to 等于当前记录的 from 的那些记录,对这些记录的 value 求和。
英文版 https://c.scudata.com/article/1733392163556