Sql 如何通过语法绕过与我的顺序中的CASE语句相关的错误?

Sql 如何通过语法绕过与我的顺序中的CASE语句相关的错误?,sql,sql-server,Sql,Sql Server,我正在使用SQL Server 2014,我正在查询链接服务器 我的T-SQL查询如下所示: USE MyDatabase SELECT [EMP_CODE], [NAME], [ADDRESS] FROM [xxx.xxx.xx].[HR].[dbo].[EMPLOYEE] WHERE [EMP_CODE] IN ( 'A0025', 'A0045', 'B0008', ... ... 'A0096' ) ORDER BY CASE [EMP_CODE] WHEN 'A00

我正在使用SQL Server 2014,我正在查询链接服务器

我的T-SQL查询如下所示:

USE MyDatabase

SELECT 

[EMP_CODE],
[NAME],
[ADDRESS]

FROM [xxx.xxx.xx].[HR].[dbo].[EMPLOYEE]

WHERE [EMP_CODE] IN (
'A0025',
'A0045',
'B0008',
 ...
 ...
 'A0096' )

ORDER BY
CASE [EMP_CODE]

WHEN 'A0025' THEN 1
WHEN 'A0045' THEN 2
WHEN 'B0008' THEN 3
...
...
WHEN 'A0096' THEN 68

END
我的问题是在运行上述T_SQL查询时收到以下错误消息:

"Case expressions may only be nested to level 10."

如何避免此错误?

我不知道嵌套的
大小写
表达式来自何处。但另一种表述是使用
JOIN

SELECT . . .
FROM [xxx.xxx.xx].[HR].[dbo].[EMPLOYEE] e LEFT JOIN
     (VALUES ('A0025', 1), ('A0045', 2), ('B0008', 3), . . .)
     ) v(emp_code, ord)
     ON e.emp_code = v.emp_code
ORDER BY COALESCE(v.ord, 1000000)

我看不到嵌套的
case
表达式,因此我对这段代码如何生成此错误感到有点困惑。链接服务器是否标记为排序规则兼容?如果不是的话,这可能会导致一些时髦的重写。此外,在对子查询排序之前,请先尝试在子查询中引入
CASE
表达式。如果所有其他操作都失败,则在子查询中引入一个表(使用
)并在该子查询中加入
联接
。@GordonLinoff我在查询中遗漏了WHERE部分。我也更新了。我不知道丢失的部分是否是问题的原因。这里解释了错误的原因(cc@jeroenmoster),您可以使用一些简单的技巧大大简化大小写表达式。如果我们假设您通常按实际字符串排序,那么只需将这些“正常”值移出case表达式,并保留特殊值。例如,
当'A0096'然后1或0结束时,按案例排列EMP_代码,EMP_代码最好在一个可以连接的表中正式捕获您的特殊排序值,从而使对顺序的更改变得更加简单和容易。