У меня есть такое заявление:Dynamic Заказывайте Пункт включая Рассчитано колонок не работает
DECLARE @OrderBy nvarchar(50)
SELECT
t1.Forename,
t1.Surname,
/** Calculcated Column Start **/
(
SELECT
(
SELECT Count(FulfilledDelivery) FROM dbo.Deliveries d1 WHERE d1.UserID = t1.UserID
)
-
(
SELECT Count(CancelledDelivery) FROM dbo.Deliveries d1 WHERE d1.UserID = t1.UserID
)
) AS 'Deliveries'
/** Calculcated Column End **/
FROM
TableName t1
WHERE
ORDER BY
CASE WHEN @OrderBy = 'Deliveries' THEN 'Deliveries' END DESC,
CASE WHEN @OrderBy = 'Forename' THEN t1.Forename END DESC,
CASE WHEN @OrderBy = 'Surname' THEN t1.Surname END DESC
END;
В основном, это работает отлично, за исключением вычисляемого столбца «Deliveries
» не работает в пункте OrderBy. Я не получаю никаких ошибок из моего кода SQL, но он просто не упорядочивает вычисляемый столбец «Поставки», когда я устанавливаю параметр @OrderBy в «Поставки».
Если удалить динамический порядок по п, то он работает отлично, как это:
....
ORDER BY
'Deliveries' DESC;
Как я могу заставить его работать в динамической версии?
Является ли это эффективное способ сделать это? Я спрашиваю, потому что сотни пользователей будут сортировать свои результаты одновременно. –
@volume one, да, это должно быть масштабируемым, другой подход - это вычисленное значение результата результата и id в таблице temp, соединение с временной таблицей и использование столбца таблицы temp в порядке – radar