如何在 table 上使用 OVER(ORDER BY()) 和现有的订单依据?

How do you use OVER(ORDER BY()) on a table with an existing order by?

我想实现以下目标:

    SELECT DISTINCT 
    id AS Col0,
    'constant' AS Col1
    IIF(z < 0, x, 0) AS Col2,
    IIF(z > 0, x, 0) AS Col3,
    SUM(x) OVER(ORDER BY Col2 DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Col4]
FROM y
ORDER BY Col2 DESC
OFFSET 0 ROWS
FETCH NEXT 500 ROWS ONLY

我正在尝试创建一个累积列。问题是我想在 OVER() 上动态使用表的 ORDERBY(),但 OVER(ORDERBY()) 不支持基于索引,也不会接受 Col1 作为列。

我该怎么做?之后我可以在代码中轻松地做一些事情,但我更愿意学习如何在纯 SQL.

中做到这一点

只需将您的 Order By Col2 替换为用于创建 Col2

的表达式
SELECT DISTINCT 
    id AS Col0,
    'constant' AS Col1
    IIF(z < 0, x, 0) AS Col2,
    IIF(z > 0, x, 0) AS Col3,
    SUM(x) OVER(ORDER BY IIF(z > 0, x, 0) DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Col4]
FROM y
ORDER BY Col2 DESC
OFFSET 0 ROWS
FETCH NEXT 500 ROWS ONLY