ORDER BY с оператором CASE для столбца с псевдонимом - PullRequest
2 голосов
/ 28 июня 2010

Мне нужна хранимая процедура, которая позволит мне возвращать отсортированные результаты на основе двух входных параметров: @sortColumnName и @sortDirection.Я написал следующую хранимую процедуру, но при ее запуске я получаю эту ошибку: «Неверное имя столбца« LastPayCheckDate ».»

SELECT Name, SUM(Pay), MAX(PayCheckDate) as LastPayCheckDate
FROM Employee
GROUP BY Name
ORDER BY 
    CASE WHEN @sortColumnName = 'LastPayCheckDate' AND @sortDirection = 'ASC'
        THEN [LastPayCheckDate] END ASC,
    CASE WHEN @sortColumnName = 'LastPayCheckDate' AND @sortDirection = 'DESC'
        THEN [LastPayCheckDate] END DESC

Что происходит?Я полагаю, что t-sql выполняет оператор case перед select ... Я прав?Как я могу обойти эту проблему?

Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 28 июня 2010

Попробуйте это

ORDER BY 
    CASE WHEN @sortColumnName = 'LastPayCheckDate' AND @sortDirection = 'ASC'
        THEN MAX(PayCheckDate) END ASC,
    CASE WHEN @sortColumnName = 'LastPayCheckDate' AND @sortDirection = 'DESC'
        THEN MAX(PayCheckDate) END DESC

Пример

create table Test (id int, somevalue int)

insert Test values(1,1)
insert Test values(2,1)
insert Test values(3,2)
insert Test values(3,2)
insert Test values(4,2)

запустите это за 1 выстрел

declare @sortDirection char(4)
select  @sortDirection = 'DESC'

select somevalue, COUNT(*)
 from Test
 group by somevalue 
 order by case when @sortDirection = 'ASC'
 then COUNT(*) end asc,
 case when @sortDirection = 'DESC'
 then COUNT(*) end desc

 select  @sortDirection = 'ASC'
 select somevalue, COUNT(*)
 from Test
 group by somevalue 
 order by case when @sortDirection = 'ASC'
 then COUNT(*) end asc,
 case when @sortDirection = 'DESC'
 then COUNT(*) end desc
0 голосов
/ 28 июня 2010

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

Кроме того, я думаю, что вам нужно убедиться, что все ваши столбцы воператор case конвертируется в тот же тип данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...