我有一个用户定义的函数,可以返回一个表。问题在于该表需要根据复杂的标准进行排序,因此,该表不应该由函数调用程序进行排序,而需要在函数本身中进行排序。
简化示例
select *
from custom_function('param1', 'param2' ...)
order by
complex criteria 1,
complex criteria 2....
是否可以将订单移动到函数中并从select中获得有序的结果?
答案 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