У меня следующий запрос. При запуске я получаю
Ошибка преобразования типа данных nvarchar в числовой.
Это происходит только тогда, когда @sortorder = 1
или -1
, отсортировано по имени. Однако, если оператор case удаляется и используется только order by Name asc
, запрос выполняется без ошибок.
Может ли кто-нибудь объяснить, что здесь происходит? спасибо.
DECLARE @SortOrder INT = 1
CREATE TABLE #Results
(
ID INT IDENTITY(1,1),
NameID INT,
Expected NUMERIC(5,1),
Actual NUMERIC(5,1)
)
SELECT Name, Expected, Actual, ID
FROM (
SELECT ISNULL(NULLIF(Words.Word, ''), Name.Primary) AS [Name], #Results.Expected, #Results.Actual, #Results.NameID
FROM #Results
INNER JOIN Name ON Name.ID = #results.NameID
LEFT OUTER JOIN Words ON Name.WordID = Words.WordID
AND Words.LanguageID = 0
UNION
SELECT 'AVG' AS Name,
CAST(((SUM(#Results.Expected))/COUNT(#Results.ID)) AS NUMERIC(5,1)) AS [Expected],
CAST(((SUM(Actual))/COUNT(ID)) AS NUMERIC(5,1))AS [Actual],
-9999 as [ID]
FROM #Results
) AS Results
ORDER BY
CASE @SortOrder
WHEN 1 THEN Name
WHEN 2 THEN Expected
WHEN 3 THEN Actual
END ASC,
CASE @SortOrder
WHEN -1 THEN Name
WHEN -2 THEN Expected
WHEN -3 THEN Actual
END DESC