Причина - область действия столбца. Вы вводите колонку одновременно с ее использованием. Это не разрешено в SQL Server.
Для ясности - вы можете использовать псевдоним столбца в ORDER BY
, но проблема здесь в том, что вы используете его внутри функции CAST
- это проблема.
Правильный синтаксис будет (это решение путем изменения области действия):
SELECT TOP 100 * FROM (
SELECT ma.*,
(SELECT TOP (1) Price FROM [dbo].[ItemSKU] WHERE ma.OldSku = NewSKu) AS NewPrice
FROM [dbo].[2018] AS ma
) a ORDER BY CAST(NewPrice AS DECIMAL(10,2)) DESC
или (здесь мы делаем все операции, необходимые для заказа в списке столбцов, чтобы вы могли ссылаться на псевдоним столбца в ORDER BY
)
SELECT TOP 100 ma.*,
CAST((SELECT TOP (1) Price FROM [dbo].[ItemSKU] WHERE ma.OldSku = NewSKu) AS DECIMAL(10, 2)) AS NewPrice
FROM [dbo].[2018] AS ma
ORDER BY NewPrice