对视图排序 SQL Server 2014
Sort a View SQL Server 2014
我正在尝试找到一种方法来对视图中的结果进行排序。我知道 Order by
命令不起作用。这样做的原因是我们正在使用 BI 工具 'Board' 来钻取原始数据。不幸的是,由于 Where
子句是动态的,程序总是将它放在查询的末尾,因此程序无法像我对常规查询那样对钻取进行排序。
因此 Order by
会出现在 Where
之前,这会导致错误。
如有任何建议,我们将不胜感激。
谢谢,
斯科特
所以有几种方法可以实现这一点,一种是确保视图正在读取的数据已经排序,为此,您要确保 table/s 上的索引正在读取的视图按照您想要的方式排序,如果这不可能,那么您还可以在视图本身上创建一个聚簇索引并在那里指定排序顺序。
如果无法创建索引,我发现了另一种方法,但并不总是理想的,因为它会在结果集中创建一个额外的列,这没有任何意义,您可以这样做:
SELECT ROW_NUMBER() OVER ( ORDER BY [col1] ASC ) AS [sort_col] ,
[col1] ,
[col2] ,
[col3]
FROM [dbo].[table];
如果你这样做,你最终会得到额外的列,给出行号,但数据将按 [col1] 排序。与此有关的一件事是,如果您确实将其放入视图定义中,您仍然必须 select 查询中的该列才能进行排序。
我正在尝试找到一种方法来对视图中的结果进行排序。我知道 Order by
命令不起作用。这样做的原因是我们正在使用 BI 工具 'Board' 来钻取原始数据。不幸的是,由于 Where
子句是动态的,程序总是将它放在查询的末尾,因此程序无法像我对常规查询那样对钻取进行排序。
因此 Order by
会出现在 Where
之前,这会导致错误。
如有任何建议,我们将不胜感激。
谢谢, 斯科特
所以有几种方法可以实现这一点,一种是确保视图正在读取的数据已经排序,为此,您要确保 table/s 上的索引正在读取的视图按照您想要的方式排序,如果这不可能,那么您还可以在视图本身上创建一个聚簇索引并在那里指定排序顺序。
如果无法创建索引,我发现了另一种方法,但并不总是理想的,因为它会在结果集中创建一个额外的列,这没有任何意义,您可以这样做:
SELECT ROW_NUMBER() OVER ( ORDER BY [col1] ASC ) AS [sort_col] ,
[col1] ,
[col2] ,
[col3]
FROM [dbo].[table];
如果你这样做,你最终会得到额外的列,给出行号,但数据将按 [col1] 排序。与此有关的一件事是,如果您确实将其放入视图定义中,您仍然必须 select 查询中的该列才能进行排序。