Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Сортировка с помощью CASE


Автор: vahitov 26.2.2006, 09:24
Задача такая: мне надо вернуть из хранимой процедуры записи, отсортированные по полям. Я это реализую следующим запросом:

IF @sortOrder = 'ASC'
BEGIN
SELECT F.[Title], F.[Hits]
FROM File F
ORDER BY
CASE @sortColumn WHEN 'Title' THEN F.[Title] END,
CASE @sortColumn WHEN 'Hits' THEN F.[Hits] END
ASC
END
ELSE
IF @sortOrder = 'DESC'
BEGIN
SELECT F.[Title], F.[Hits]
FROM File F
ORDER BY
CASE @sortColumn WHEN 'Title' THEN F.[Title] END,
CASE @sortColumn WHEN 'Hits' THEN F.[Hits] END
DESC
END

Причем поля Hits и Title разных типов.
В результате этого адекватно происходит сортировка только по полю, указанному в самом последнем CASE-е, т.е. если я сортирую по полю Hits, то все работает правильно, а если сортирую по полю Title то не происходит сортировки не по какому полю. Может кто-то обяснит почему это так или как сделать правильно?

Автор: vahitov 26.2.2006, 13:37
Задача решена. Кому интересно привожу решение:

IF @sortOrder = 'ASC'
BEGIN
SELECT F.[Title], F.[Hits]
FROM File F
ORDER BY
CASE @sortColumn WHEN 'Title' THEN F.[Title] END ASC,
CASE @sortColumn WHEN 'Hits' THEN F.[Hits] END
ASC
END
ELSE
IF @sortOrder = 'DESC'
BEGIN
SELECT F.[Title], F.[Hits]
FROM File F
ORDER BY
CASE @sortColumn WHEN 'Title' THEN F.[Title] END DESC,
CASE @sortColumn WHEN 'Hits' THEN F.[Hits] END
DESC
END

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)