此 SQLfiddle 演示会产生您描述的错误。
您需要为每种数据类型使用不同的表达式,或者您需要使较低优先级的数据类型(字符串)与较高的数据类型(int)兼容 - 通常通过将 int 转换为字符串。
您的要求不明确,但更简单的方法是简单地按一个然后另一个订购。例如:
SELECT clientId, CountryCode
FROM dbo.client
ORDER BY CountryCode, clientId;
SQLfiddle 演示
您也可以引入条件,但它们似乎不是必需的。
SELECT clientId,
CountryCode
FROM dbo.client
ORDER BY CountryCode, CASE
WHEN CountryCode IS NULL
THEN clientId END;
SQLfiddle 演示
...或者这个,以稍微不同的方式订购...
SELECT clientId,
CountryCode
FROM dbo.client
ORDER BY CASE
WHEN CountryCode IS NULL
THEN clientId END, CountryCode;
SQLfiddle 演示
同样,您的要求尚不清楚 - 这两种要求都可能不会产生您想要的结果。如果您准确显示您期望的输出,我们可以编写您需要的代码。