Результаты заказа возвращены из табличной функции - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть пользовательская функция, которая возвращает таблицу. Проблема в том, что эта таблица должна быть отсортирована по сложным критериям, и поэтому она не должна сортироваться вызывающей функцией, а должна быть отсортирована в самой функции.

Упрощенный пример

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

Можно ли переместить заказ в функцию и получить упорядоченные результаты из выбора?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Вы можете использовать заказ, как показано ниже. Пусть табличная функция будет:

    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

о / р

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
0 голосов
/ 06 сентября 2018

Вы не можете сортировать таблицу напрямую, но вы можете добавить столбец с указанием порядка. Итак, определите функцию как:

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

Тогда вы можете назвать это как:

select f.*
from dbo.func(. . .) f
order by ord;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...