表值函数返回的订购结果

时间:2018-09-06 10:04:06

标签: sql sql-server tsql

我有一个用户定义的函数,可以返回一个表。问题在于该表需要根据复杂的标准进行排序,因此,该表不应该由函数调用程序进行排序,而需要在函数本身中进行排序。

简化示例

select * 
from custom_function('param1', 'param2' ...) 
order by 
complex criteria 1,
complex criteria 2....

是否可以将订单移动到函数中并从select中获得有序的结果?

2 个答案:

答案 0 :(得分:3)

您不能直接对表格进行排序,但是可以添加一列以指定顺序。因此,将函数定义为:

select . . .,
       row_number() over (order by <complex ordering criteria>) ord
. . .

然后您可以将其称为:

select f.*
from dbo.func(. . .) f
order by ord;

答案 1 :(得分:1)

您可以如下所示使用order by。让表值函数为:

    CREATE FUNCTION ReturnTableTOrder()
    RETURNS @returnList TABLE (Col1 char(1), Col2 int)
    AS
    BEGIN   

         INSERT INTO @returnList
         SELECT 'A',5 Union All
         SELECT 'D',2 Union All
         SELECT 'B',4 Union All
         SELECT 'E',1 Union All
         SELECT 'C',3 

     RETURN

    END

您可以按列序位置进行订购

    Select * from ReturnTableTOrder()
    Order by 1

o / p

Col1  Col2
 A     5
 B     4
 C     3
 D     2
 E     1

以及以下查询,

    Select * from ReturnTableTOrder()
    Order by 2

输出是

Col1  Col2
 E     1
 D     2
 C     3
 B     4
 A     5