有没有一种方法可以在X前置行和当前行之间动态设置行?

时间:2018-10-09 20:28:36

标签: sql sql-server

我正在寻找一种查询方式,可以使用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的结果?

谢谢

0 个答案:

没有答案