gpt4 book ai didi

sql - 在 WHERE 中引用 ROW_NUMBER()

转载 作者:行者123 更新时间:2023-12-04 02:05:31 27 4
gpt4 key购买 nike

查询产生超过 500K 个结果。我想要做的是将它们分成 100K 个结果。我创建了一个行号列来帮助解决这个问题,但现在我在我的 WHERE 中引用它,它不会处理该函数并不断收到此错误:

消息 4108,级别 15,状态 1,第 1 行窗口函数只能出现在 SELECT 或 ORDER BY 子句中。

查询引用:

1  SELECT
2 mt.Name,
3 mt.IDNO,
4 so.IDType,
5 Row = ROW_NUMBER()OVER(ORDER BY mt.Name)
6
7 FROM MainTable mt WITH(NOLOCK)
8 LEFT JOIN SupportTable1 so WITH(NOLOCK) ON so.Name = mt.Name
9 LEFT JOIN SupportTable2 st WITH(NOLOCK) ON st.Name = mt.Name
10
11 WHERE 1=1
12 AND ROW_NUMBER()OVER(ORDER BY mt.Name) BETWEEN '1' and '100000'
Msg 4108, Level 15, State 1, Line 12 Windowed functions can only
appear in the SELECT or ORDER BY clauses.

我该怎么做才能使用它,或者是否有其他可供探索的选项可以满足我的需求?

谢谢。

最佳答案

您没有使用 MySQL。为此,请使用 CTE 或子查询:

SELECT s.*
FROM (SELECT mt.Name, mt.IDNO, so.IDType, Row = ROW_NUMBER() OVER (ORDER BY mt.Name)
FROM MainTable mt LEFT JOIN
SupportTable1 so
ON so.Name = mt.Name LEFT JOIN
SupportTable2 st
ON st.Name = mt.Name
) s
WHERE Row BETWEEN 1 and 100000;

注意事项:

  • WHERE 子句中不能使用窗口函数。
  • WHERE 子句中也不能使用列别名;这就是为什么需要 CTE 或子查询的原因。
  • 不要用单引号将整数常量括起来。

或者,您可以只使用 TOP:

      SELECT TOP (100000) mt.Name, mt.IDNO, so.IDType, Row = ROW_NUMBER() OVER (ORDER BY mt.Name)
FROM MainTable mt LEFT JOIN
SupportTable1 so
ON so.Name = mt.Name LEFT JOIN
SupportTable2 st
ON st.Name = mt.Name
ORDER BY Row;

关于sql - 在 WHERE 中引用 ROW_NUMBER(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43724057/

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