我想要实现以下目标:
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
我正在尝试制作累积专栏。问题是我想使用表格&#39; ORDERBY()
动态OVER()
但OVER(ORDERBY())
不支持基于索引,也不接受Col1
作为列。
我该怎么做呢?我可以在代码中轻松地做一些事情,但我更愿意学习如何在纯SQL中执行此操作。
答案 0 :(得分:1)
只需将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