gpt4 book ai didi

sql - 在 where 子句中使用排名函数派生列 (SQL Server 2008)

转载 作者:行者123 更新时间:2023-12-02 11:52:11 25 4
gpt4 key购买 nike

希望这对于 SQL 忍者来说是微不足道的...一直在尝试让以下查询正常工作:

这适用于 SQL Server 2008

SELECT 
ROW_NUMBER() OVER (ORDER BY Date_Time DESC) AS RowNumber, *
FROM
(SELECT
T.A_ID, T.User_Name, T.Date_Time, T.Value,
U.ID, U.Name, U.Field1, U.Field2,
COUNT(U.ID) OVER () AS TotalRows
FROM
TeeTable as T
INNER JOIN
YouTable AS U ON T.U_ID = U.ID
WHERE
T.Value BETWEEN 222 AND 225) Filtered
WHERE
RowNumber BETWEEN 1 AND 5

这些值在某种程度上是为了给出特定示例而设计的,但查询的精神被完全保留。我从这个语句中得到的错误是:

Invalid column name 'RowNumber'.

如果我删除最后的 WHERE 子句(RowNumber BETWEEN ...),它将返回预期的结果集(A_ID、User_Name、Date_Time 等...),其中 RowNumber 作为所述结果中的列(具有有意义的值)。但我无法在 WHERE 子句中与它进行比较。我显然做了一些愚蠢的事情,但这达到了我的 SQL 限制!

我也尝试过将其重新安排为 CTE(使用过滤 AS ...),但最终结果是相同的,看来这只是我已经在做的事情的一个糖。

想法?如何根据 RowNumber 派生列进行筛选?

最佳答案

您必须将 WHERE 运算符移至创建 RowNumber 列的项目列表上方。使用派生表或 CTE:

SELECT * 
FROM (
SELECT *, ROW_NUMBER() OVER (...) as RowNumber
FROM ...) As ...
WHERE RowNumber = ...

等效的 CTE 为:

WITH cte AS (
SELECT *, ROW_NUMBER() OVER (...) as RowNumber
FROM ...)
SELECT * FROM cte
WHERE RowNumber = ...

关于sql - 在 where 子句中使用排名函数派生列 (SQL Server 2008),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1479831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com