Sql server 2005 SQL order by和左外联接不';我没有正确的顺序
我有一个视图,它连接两个表并按第一个表排序。只是顺序不对。它会丢失一个偶然的记录,然后在最后,这些记录中的大多数按顺序存在,然后在最后,其余的记录按顺序存在。所以它有这样的记录Sql server 2005 SQL order by和左外联接不';我没有正确的顺序,sql-server-2005,left-join,sql-order-by,Sql Server 2005,Left Join,Sql Order By,我有一个视图,它连接两个表并按第一个表排序。只是顺序不对。它会丢失一个偶然的记录,然后在最后,这些记录中的大多数按顺序存在,然后在最后,其余的记录按顺序存在。所以它有这样的记录 1 (most of the records in order) 2 4 5 6 7 8 10 11 13 15 3 (the first set of missing records) 12 9 (the rest of the missing records) 14 我的观点如下。我需要在加入之前完成订单吗?我
1 (most of the records in order)
2
4
5
6
7
8
10
11
13
15
3 (the first set of missing records)
12
9 (the rest of the missing records)
14
我的观点如下。我需要在加入之前完成订单吗?我做错了什么?(我已经获得了这个视图,在另一个db实例中完全相同的视图可以正常工作。)
(编辑)排序字段的类型是[ID][int]notnull IDENTITY(1,1),很可能这两台SQL Server的版本略有不同。对此有一个已知的修补程序:
阅读这里有一个修补程序,您必须在2000兼容模式下运行它才能工作。为什么不在从视图中选择时按顺序排序 我将从视图中完全删除ORDERBY子句。相反,请在查询视图时指定您的顺序。博客条目中的一条注释将其解释得非常清楚 再一次,来自BOL的文本: 当在视图、内联函数、派生表或子查询的定义中使用ORDER BY时,该子句仅用于确定TOP子句返回的行。ORDER BY子句不保证在查询这些构造时结果是有序的,除非在查询本身中也指定了ORDER BY 尽管视图定义包含ORDER BY子句,但ORDER BY子句仅用于确定TOP子句返回的行。在查询视图本身时,SQL Server不保证结果将被排序,除非您明确指定,如以下查询所示:
“您应该始终在最后一个可能的点“排序”,因为排序很慢(N log N)。在视图上执行select时,通常会包含where子句。您只想对结果集进行排序。我不确定这里是否有足够的信息来回答您的问题。了解Table1和Table2的表定义,或者至少了解相关列的数据类型是很有用的。这是一个好主意——我会搞乱我的DTS(它使用视图),看看我是否可以这样解决它。啊哈!至少这是有道理的!
CREATE VIEW [dbo].[SampleView]
AS
SELECT TOP 100 PERCENT blp.*, ISNULL(YEAR(DATEADD(month, 2, tb.[End of D&D])), 0) AS DEMO_FY
FROM dbo.Table1 AS blp LEFT OUTER JOIN
dbo.Table2 AS tb ON blp.FACIL_NAME = tb.[Structure ID]
ORDER BY blp.ID
SELECT * FROM TopView
ORDER BY LastName