【发布时间】:2015-03-04 16:25:17
【问题描述】:
我有以下疑问:
SELECT
id,
display_order
FROM
data_element_value
WHERE
key_id = 32
ORDER BY
CASE WHEN (display_order IS NOT NULL) THEN
display_order
ELSE
`value`
END
预期的输出是:
id display_order
1 1
13 2
15 3
16 10
但是,我得到:
id display_order
1 1
16 10
13 2
15 3
我已经尝试将display_order 转换为UNSIGNED:
CASE WHEN (display_order IS NOT NULL) THEN
CAST(display_order as UNSIGNED)
ELSE
`VALUE`
END
我也试过了:
CASE WHEN (display_order IS NOT NULL) THEN
display_order + 0
ELSE
`VALUE`
END
但这似乎没有帮助。
对于display_order,列数据类型为tinyint(2), unsigned, and allow nulls
编辑
这里是describe data_element_value
Field Type Null Key Default Extra
id int(11) NO PRI (null) auto_increment
key_id int(11) NO MUL (null)
value varchar(50) NO (null)
sub_title varchar(125) YES (null)
chart_color char(7) YES (null)
display_order tinyint(2) unsigned YES (null)
我可以做些什么来纠正这个问题吗?
【问题讨论】:
-
describe data_element_value的输出是什么? -
您可以发布您的表格示例吗?使用相同的行测试解决方案会很有趣
-
@cegfault 我添加了描述
标签: mysql sql-order-by case