SQL 'Order By' 子句似乎有效,但 Returns 未排序的数据

SQL 'Order By' Clause Appears to Work, but Returns Unsorted Data

我在 SQL Server 2014 中有这个 table 值函数。重要的部分是最后的 'ORDER BY',它似乎什么也没做。如果我将其取出或删除 DESC,最终结果是相同的。为什么会这样?我通常希望它以这种方式使用时按最近 -> 最晚排序。

BEGIN
    INSERT INTO @result (Id, Name, Description, TypeID, Date)
        select b.ID, b.Name, b.Description, b.TypeID, max(Date) from BTable b
        inner join ATTable at on b.atID = at.ID
        inner join STATTable stat on at.ID= stat.atID
        inner join CCTable cc on stat.stID= cc.stID
        inner join STTAble st on cc.stID= st.ID
        inner join TSTable ts on ts.cID = @cID and ts.bID = b.ID
            where b.Active = 1 and at.Active = 1 and stat.Active = 1 and cc.Active = 1 and st.Type = 1 AND 
                cc.cID = @cId and (b.cID IS NULL OR b.cID = @cId) and b.aID = (Select c.aID from CTable c where c.ID = @cId)
        GROUP BY b.ID, b.Name, b.Description, b.atID
        ORDER BY Max(Date) DESC
RETURN

当使用这个函数时,我得到类似的东西:

Id      |Name                  | Date
----------------------------------------------------------------------------
32      |Mary       | NULL | 1 |    2015-06-04 00:00:00.000
68      |Joyce      | NULL | 1 |    2015-02-25 00:00:00.000
1069    |James      | NULL | 1 |    2014-03-31 00:00:00.000
1079    |Nwabudike  | NULL | 1 |    2015-06-04 00:00:00.000
1143    |Hala       | NULL | 1 |    2015-03-17 00:00:00.000

这显然不是按日期排序的。 为什么会这样,我怎样才能让它正确排序?

你不能。

结果集的顺序由最外层查询中的order by决定。

所以,忘记函数中的order by。然后将函数调用为:

select t.*
from dbo.tblfunc() t
order by t.date_received desc;

编辑:

老实说,如果 @result 是一个 "real" table,具有集群、身份、主键,并且您使用 order by 插入行,那么有你很有可能把它们恢复原状。对于较小的 tables 也是如此(因为 table 由聚簇索引扫描)。我不确定在并行环境中是否总是如此。