use*_*929 1 sql sql-server sql-order-by
试图使用此查询:
SELECT clientId,
CountryCode
FROM client
ORDER BY
CASE
WHEN CountryCode IS NULL
THEN clientId
ELSE CountryCode
END
Run Code Online (Sandbox Code Playgroud)
但收到错误信息:
消息8115,级别16,状态5,行1
算术溢出错误将数字转换为数据类型varchar.
表结构是:
ClientId numeric(10,0)
CountryCode char(3)
Run Code Online (Sandbox Code Playgroud)
此SQLfiddle演示会产生您描述的错误.
您需要为每种数据类型使用不同的表达式,或者您需要使较低优先级数据类型(字符串)与较高的数据类型(int)兼容 - 通常通过将int转换为字符串.
您的要求不明确,但更简单的方法是简单地按一个然后另一个订购.例如:
SELECT clientId, CountryCode
FROM dbo.client
ORDER BY CountryCode, clientId;
Run Code Online (Sandbox Code Playgroud)
您也可以引入条件,但似乎并不需要它们.
SELECT clientId,
CountryCode
FROM dbo.client
ORDER BY CountryCode, CASE
WHEN CountryCode IS NULL
THEN clientId END;
Run Code Online (Sandbox Code Playgroud)
......或者这个,以略微不同的方式订购......
SELECT clientId,
CountryCode
FROM dbo.client
ORDER BY CASE
WHEN CountryCode IS NULL
THEN clientId END, CountryCode;
Run Code Online (Sandbox Code Playgroud)
同样,您的要求不清楚 - 这些都可能无法产生您想要的结果.如果您准确显示您期望的输出,我们可以编写您需要的代码.
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |