SQL Server 2012. Несколько способов динамической сортировки

Добрый день!
Сегодня, изучая новые возможности SQL Server 2012, я поэкспериментировал с несколькими способами динамической сортировки.

Допустим мы имеем таблицу

table1
(
 ID INT,
 Name1 varchar(100),
 Name2 varchar(100),
 Name3 varchar(100)
)

И нам необходимо по какому-то признаку сортировать данные при выборке из таблицы по разным столбцам

Метод №1

DECLARE @SORTBY INT
SET @SORTBY=2

SELECT
 ID,
 Name1,
 Name2,
 Name3
FROM table1
ORDER BY
CASE
 WHEN @SORTBY=1 THEN Name1
 WHEN @SORTBY=2 THEN Name2
 WHEN @SORTBY=3 THEN Name3
END

Метод №2

DECLARE @SORTBY INT
SET @SORTBY=3

SELECT
 ID,
 Name1,
 Name2,
 Name3
FROM table1
ORDER BY
 IIF(@SORTBY=1, Name1, IIF(@SORTBY=2, Name2, Name3))

IIF — это новая функция, которая появилась в MS SQL 2012 (возвращает одно из двух значений в зависимости от того, логическое выражение есть истинным или ложным.)
В данном случае сортировка будет выполняться по полю Name3.

Метод №3

DECLARE @SORTBY INT
SET @SORTBY=2

SELECT
 ID,
 Name1,
 Name2,
 Name3
FROM table1
ORDER BY
 CHOOSE(@SORTBY, Name1, Name2, Name3)

CHOOSE — это новая функция, которая появилась в MS SQL 2012 (возвратит элемент по указанному индексу из списка доступных значений)
В данном случае сортировка будет выполняться по полю Name2.

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal

SQL Server 2012. Несколько способов динамической сортировки: 1 комментарий

  1. n0isy

    Великие функции были взяты прямиком из MS Access 2.0 вышедшего ровно ДВАДЦАТЬ лет назад )))

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *