如何在 sql 视图中排序

问题描述 投票:0回答:5

我创建了一个 sql 视图,我需要通过在 4 个字段上使用 ORDER BY 对 select 的结果进行排序,但我收到消息说 ORDER BY 不能在视图中使用,除非我使用 TOP。 有人可以解释为什么需要 TOP,并且有人有在 sql 视图中排序的解决方法吗?

谢谢。

sql view sql-order-by
5个回答
18
投票

您不需要对视图进行排序。视图就像一个表格,因此当您从中选择时可以对它进行排序:

select * from yourView order by yourColumns

6
投票

不保证视图的输出会被排序

仅最外层的 ORDER BY 适用于结果集:不适用于任何内部的。所以只有这个ORDER BY才能保证起作用:

SELECT col1, col2, FROm MyView ORDER BY col2

您可以将其添加到视图或派生表中,它会强制“中间实现”,因为结果必须排序。但是,对于 SQL Server 2005 及更高版本,您必须使用

TOP 2000000000
而不是
TOP 100 PERCENT
(Daniel Vassallo 提到的 HF 除外!)

有人在某些时候以与内部不同的顺序使用您的视图。


4
投票

你可以尝试:

CREATE VIEW View_Products
AS
SELECT ProductID, ProductName, UnitPrice, CreateDate FROM Products
Order by CreateDate DESC
OFFSET 0 ROWS

0
投票

在要用于对视图进行排序的列上创建索引会有帮助吗?


0
投票

在 SQL Server 中,当您在视图中使用 ORDER BY 子句时,还必须使用 TOP 子句。这是因为 SQL Server 需要一种方法来跟踪显示结果时哪些行去了哪里。

现在,您可以使用一个名为“公共表表达式”(CTE) 的技巧。 在我们的例子中,我们创建一个 CTE,根据我们想要的顺序为每行提供一个数字(在本例中为“Typ”字段)。然后,我们告诉 SQL 代码的主要部分查看该 CTE,但只选择数字不为空的行。

这让我们可以在视图中对行进行排序,而无需直接使用 ORDER BY 子句。 相反,我们使用 CTE 中的 ROW_NUMBER() 函数来完成排序。

创建视图Vw_YourView 作为 CTE 为 ( 选择指南, 类型, ROW_NUMBER() OVER (ORDER BY Typ) AS RowNum 来自 tbL_YourTable) 选择指南, 典型值 从 热膨胀系数 在哪里 RowNum 不为空;

© www.soinside.com 2019 - 2024. All rights reserved.