0

SQL 选择查询如下所示。它正在工作,但它返回的第一行是错误的。预期结果也如下所示。

为什么会这样?你能解决这个问题吗?

SELECT pid, pname, pcost
FROM Product
JOIN SubCategory ON Product.subcate_id = SubCategory.subcate_id
JOIN Category ON SubCategory.cate_id = Category.cate_id
WHERE Category.cate_id = 1 order by pcost

结果集是

pid         pname           pcost
----------- --------        --------------
16          hp-dreamscreen  23232
25          imac-pc-parts   234
35          imac            2349
9           Apple_cinema_   30000
14          hp-bu178aa      30000
15          lenovo-c200     32111
17          imac            345345

(7 row(s) affected)

您可以在第一行的结果集中看到问题 - 它应该出现在 imac(第三行)之后,如order(pcost)

4

4 回答 4

1

pcost 可能是一个 varchar 列。

尝试铸造它哟 intcast (pcost as int)

于 2012-10-17T09:16:51.557 回答
1

为什么你要存储pcost为 (VAR)Char 类型?
对于 SQLite / MySQL,您可以使用1*将数字强制转换为数字。

SELECT pid, pname, pcost
FROM Product
JOIN SubCategory ON Product.subcate_id = SubCategory.subcate_id
JOIN Category ON SubCategory.cate_id = Category.cate_id
WHERE Category.cate_id = 1
order by 1*pcost

对于 SQL Server,您需要谨慎行事,并且只强制使用数字。从 SQL Server 2012 开始,这很容易使用TRY_CONVERT

order by TRY_CONVERT(int, pcost)
于 2012-10-17T09:15:09.957 回答
0

如果 的数据类型pcost不是数字。将其转换为数字数据类型。尝试这个,

SELECT...
FROM..
WHERE..
ORDER BY CAST(pcost as INT) 

如果你正在使用MySQL

SELECT...
FROM..
WHERE..
ORDER BY CAST(pcost as SIGNED) 
于 2012-10-17T09:14:34.623 回答
0

pcost 列的数据类型是什么?如果它是 varchar 或与排序正确相关的东西,请尝试将类型更改为数字。

于 2012-10-17T09:17:23.770 回答