我正在寻找一种查询方式,可以使用ROWS BETWEEN在Sql Server上动态设置窗口函数的开头。
类似的东西:
SUM(field) OVER(ORDER BY field2 ROWS BETWEEN field3 PRECEDING AND CURRENT ROW)
field3 保存代表组的项目数量(通过CTE进行分组)。
有可能还是应该尝试其他方法?
>>编辑
我的查询太大且凌乱,无法在此处分享,但让我尝试解释一下我的需求。它来自于报表生成器,该报表生成器允许用户创建自定义公式,例如“ emplyoees / 10”。这也使用户可以简单地输入一个像“ 12”这样的公式,而我需要计算它们的小计和总计。使用“员工”之类的字段时,一切正常。但是对于常量值,我不能在不重写很多东西的情况下求和(我想避免)。
因此,请考虑一个名为“ aggregator”的CTE和以下查询:
SELECT
*,
"employees"/10 as "ten_percent"
12 as "twelve"
FROM aggregator
此查询返回以下输出:
row_type counter company_name department_name employees ten_percent twelve
data 1 A A1 10 1 12
data 1 A A2 15 1,5 12
data 1 A A3 10 1 12
subtotal 3 A 35 3,5 12
data 1 B B1 10 1 12
subtotal 1 B 10 1 12
total 4 45 4,5 12
如您所见,小计和总计行类型的值fot“十二”是错误的。我正在尝试解决此问题而不更改CTE。
ROLLUP将不起作用,因为我已经拥有其他列的总和。
我尝试过此操作(我在上表中省略了“ row_type_sort”,它定义了排序):
CASE
WHEN row_type = 'data' THEN
MAX(aggregator.[twelve])
ELSE
SUM(SUM(aggregator.[twelve]))
OVER (ORDER BY "row_type_sort" ROWS BETWEEN unbounded PRECEDING AND CURRENT ROW)
END AS "twelve"
如果我可以将“ counter”列的值更改为“ unbounded”,这将是我最初的问题。
LAG / LEAD也没有帮助。
我没主意了。是否可以仅通过更改查询的这一部分来实现我所需要的,或者也应该更改CTE的结果?
谢谢