Sql 如何通过语法绕过与我的顺序中的CASE语句相关的错误?
我正在使用SQL Server 2014,我正在查询链接服务器 我的T-SQL查询如下所示: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
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_代码代码>最好在一个可以连接的表中正式捕获您的特殊排序值,从而使对顺序的更改变得更加简单和容易。