尝试使用此查询:
SELECT clientId,
CountryCode
FROM client
ORDER BY
CASE
WHEN CountryCode IS NULL
THEN clientId
ELSE CountryCode
END
但收到错误消息:
消息 8115,级别 16,状态 5,第 1
行将数字转换为数据类型 varchar 的算术溢出错误。
表结构为:
ClientId numeric(10,0)
CountryCode char(3)
尝试使用此查询:
SELECT clientId,
CountryCode
FROM client
ORDER BY
CASE
WHEN CountryCode IS NULL
THEN clientId
ELSE CountryCode
END
但收到错误消息:
消息 8115,级别 16,状态 5,第 1
行将数字转换为数据类型 varchar 的算术溢出错误。
表结构为:
ClientId numeric(10,0)
CountryCode char(3)
此 SQLfiddle 演示会产生您描述的错误。
您需要为每种数据类型使用不同的表达式,或者您需要使较低优先级的数据类型(字符串)与较高的数据类型(int)兼容 - 通常通过将 int 转换为字符串。
您的要求不明确,但更简单的方法是简单地按一个然后另一个订购。例如:
SELECT clientId, CountryCode
FROM dbo.client
ORDER BY CountryCode, clientId;
您也可以引入条件,但它们似乎不是必需的。
SELECT clientId,
CountryCode
FROM dbo.client
ORDER BY CountryCode, CASE
WHEN CountryCode IS NULL
THEN clientId END;
...或者这个,以稍微不同的方式订购...
SELECT clientId,
CountryCode
FROM dbo.client
ORDER BY CASE
WHEN CountryCode IS NULL
THEN clientId END, CountryCode;
同样,您的要求尚不清楚 - 这两种要求都可能不会产生您想要的结果。如果您准确显示您期望的输出,我们可以编写您需要的代码。
错误 SQL 服务器从您的查询中定义:消息 8114,级别 16,状态 5,第 1 行将数据类型 nvarchar 转换为数字时出错。它清楚地说不能将您的 varchar 列( CountryCode )转换为数字
SELECT clientId, CountryCode FROM client
ORDER BY
CASE
WHEN CountryCode IS NULL THEN clientId
ELSE CountryCode
END
用这个修改你的查询。工作正常。
SELECT clientId, CountryCode FROM client
ORDER BY
CASE
WHEN clientId IS NULL THEN CountryCode
ELSE CountryCode
END
或者你可以使用
SELECT clientId, CountryCode
FROM client
ORDER BY
CASE
WHEN CountryCode IS NULL
THEN Right(100000000000 + clientId, 10)
ELSE CountryCode
END