代码之家  ›  专栏  ›  技术社区  ›  thursdaysgeek

SQL order by和left外部联接的顺序不正确

  •  2
  • thursdaysgeek  · 技术社区  · 16 年前

    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实例中完全相同的视图可以正常工作。)

    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
    

    5 回复  |  直到 16 年前
        1
  •  2
  •   SQLMenace    16 年前

    阅读 Create a sorted view in SQL Server 2005 and SQL Server 2008 有一个热修复程序,您必须在2000兼容模式下运行它才能工作。为什么不在从视图中选择时按顺序排序?

        2
  •  2
  •   Joel Coehoorn    16 年前

        3
  •  2
  •   Community CDub    4 年前

    评论 this 这篇博文很清楚地说明了这一点。

    再一次,来自BOL的文本:

    当在视图、内联函数、派生表或子查询的定义中使用ORDER BY时,该子句仅用于确定TOP子句返回的行。ORDER BY子句不保证在查询这些构造时结果是有序的,除非在查询本身中也指定了ORDER BY

    SELECT * FROM TopView
    ORDER BY LastName
    

    "

        4
  •  1
  •   Brent Ozar    16 年前

    很可能这两个SQL Server的版本略有不同。对此有一个已知的修补程序:

    http://support.microsoft.com/kb/926292/

        5
  •  1
  •   mfx    16 年前