다음과 같은 쿼리가 있습니다. 실행할 때대문자와 소문자가 사용 된 경우의 orderby 변환 오류
데이터 형식을 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
+1 이것은 물론 최고의 대답이다. –
나는'exec sp_executeSQL'으로 오히려 역동적 인 SQL을 사용하여 별도의 계획을 가질 가능성이 있다고 생각합니다. 제안 된대로 'IF'를 사용하고 6 가지 다른 버전의 기본 쿼리를 유지해야합니다. –
감사합니다. 내 문제를 혼란시킬뿐만 아니라 해결책을 설명했다. 너 선생님/엄마가 왜 내가 여기 와서 도움을 청하니? – 5n0u7