如何在 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
我想实现以下目标:
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