这个问题有点宽泛,所以请提前道歉。
我最近工作的公司改用了一个新的系统,该系统使用的是SQL Server而不是Mysql,我们的团队负责将几个旧的报告带到。由于新系统对事物的模拟方式略有不同,因此我们的目标并不是与旧报告保持一致。
这些是我们目前的限制:
.rdl
文件但是,据我所知,有些报告需要:
我试图通过CTE和ROW_NUMBER
的组合来聪明地解决第二个要求,例如:
with t as
(
select
row_num = row_number() over (order by a),
a, b, c
from
table1
)
select
a,
(select sum(b) from t t2 where t2.row_num < t.row_num) as running_b,
(select sum(c) from t t3 where t3.row_num < t.row_num) as running_c
from
t
order by
row_num;
在这种情况下,row_number
是必需的,因为a
值可能相同。
但是,SQL Server似乎没有为每一行正确地进行数学运算,或者我误解了有关查询的内容。一位同事经常抱怨枢轴功能存在类似问题。
我的问题不是关于单个查询。我们需要在当前的限制内为查询添加更多功能,我需要一些如何做到这一点的建议。
有人可以帮忙吗?
在参考示例查询时,我发现如果我将subselect与left self-join和group子句交换,SQL Server给了我预期的结果:
with t as
(
select
row_num = row_number() over (order by a),
a, b, c
from
table1
)
select
a,
sum(t2.b) as running_b,
sum(t2.c) as running_c
from
t
left join t t2 on t2.row_num < t.row_num
group by
t.row_num, t.a
order by
row_num;
此外,雅各布让我了解递归CTE,我认为这将有助于解决另一个问题。我认为这两种技术解决了我最紧迫的问题。