【问题标题】:SQL ORDER BY 0 (int) needs to be firstSQL ORDER BY 0 (int) 必须是第一个
【发布时间】:2014-08-21 18:40:50
【问题描述】:

我正在尝试按 ASC 顺序对整数字段进行排序,但它会自动将“0”值放在底部附近(刚好在 NULL 值上方)。

我使用的是 SQL Server 2005。我认为我的 DBMS 已经过时,因为我尝试使用 NULLS FIRST,但它未被识别。

*已编辑以显示更好的查询(感谢您的快速反馈)

我想看的:
PriSortOrder/社区名称
0/Towson
1/亚特兰大
2/巴尔的摩

我所看到的:
PriSortOrder/社区名称
1/亚特兰大
2/巴尔的摩
0/陶森

查询:

SELECT PriSortOrder, CommunityName
FROM Communities
WHERE InCatalog=1 
ORDER BY PriSortOrder 

【问题讨论】:

  • 该查询不应导致该输出。你能在sqlfiddle.com 上创建一个最小的测试用例吗?确保使用架构中的类型和数据库中的实际数据。
  • 您的查询不包括PrioritySortOrder 列的值。您是否正在查看 Community 列的值?
  • ORDER BY CASE WHEN PrioritySortOrder=0 THEN 1 ELSE 0 END,PrioritySortOrder
  • 我认为您的数据和结果现在已正确显示(使用编辑框上方的 {} 来缩进类似代码的材料 - SQL 语句和数据集)。您的查询也缺少其 FROM 子句。每个 DBMS 都会自行选择是先列出 NULL 还是最后列出。在标准 SQL 的更新版本中,如果您愿意(并且如果您的 DBMS 支持),您可以指定 NULLS FIRST 或 NULLS LAST。您应该确定您正在使用的 DBMS。

标签: sql integer sql-order-by


【解决方案1】:

在您显示PrioritySortOrder 值和Community 值之前,您不能说数据的顺序正确(或错误)。例如,如果数据是:

Community    PrioritySortOrder
0            5
1            0
2            3
NULL         6

你会得到输出:

1
2
0
NULL

如果数据是:

Community    PrioritySortOrder
0            0
1            1
2            2
NULL         3

然后你会得到结果:

0
1
2
NULL

您可以通过(添加FROM table 子句和)按Community 而不是PrioritySortOrder 排序来修复您的SQL(尽管NULL 是先出现还是最后出现取决于您的DBMS)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 2020-06-26
    相关资源
    最近更新 更多