SQL:如何按特定范围的 ID 编号,然后按时间排序?

Posted

技术标签:

【中文标题】SQL:如何按特定范围的 ID 编号,然后按时间排序?【英文标题】:SQL: How can I order by a specific range of ID numbers, then time? 【发布时间】:2015-02-03 19:24:05 【问题描述】:

这段代码很可能写得不好。这是我第一次涉足 SQL - 我正在承担一个不完全是我工作的项目,所以我正在努力学习它。

我现在的两个大问题:

    我需要将 ID 号码与某个号码分开。对于我们的实例,我们只说 1000。因此,任何低于 1000 的 ID 都会首先显示,以及它们各自的预约时间。 我在使用 ORDER BY 时遇到错误,因为我在代码中使用了 UNION。它是:

如果语句包含 UNION、INTERSECT 或 EXCEPT 运算符,则 ORDER BY 项必须出现在选择列表中。

错误指向带有 END ASC 的行。我在网上阅读了有关将整个内容包含为它自己的 SELECT 语句并使用它在 ORDER BY 代码中引用的信息,但没有任何运气。

相关代码如下:

select substring(convert(nvarchar, a.time, 8), 1,5) Time
 , PersonID AS ID
 [BLAH BLAH BLAH]
from [BLAH BLAH BLAH]
where [BLAH BLAH BLAH]

union

select 'Alts'
 , PersonID
 [BLAH BLAH BLAH]
from [BLAH BLAH BLAH]
where [BLAH BLAH BLAH]

ORDER  BY CASE
            WHEN PersonID <= 1000 THEN PersonID
            ELSE 1001
          END ASC,
          a.time

底部的这个 ORDER BY 是我要设置的。其余代码似乎执行得很好。我正在使用 Microsoft SQL Server 2012。

【问题讨论】:

【参考方案1】:

问题是顺序中的“a.time”,您应该将其称为“Time”,因为这是选择中列的别名。

【讨论】:

哇。是的,就是这样。它返回了错误“不明确的列名”,但我只是将其更改为更具体的内容并修复了它。但是,我仍然从个人 ID 的“按案例排序”中收到错误 哦,您可能需要将case语句添加到两个select语句中+给它一个别名,然后按它排序或使用联合作为派生查询并在它之外进行排序。 好吧,我试试看。另外,有没有办法对时间进行排序,以便计算 9:00、10:00、11:00、12:00、1:00、2:00?而不是 1:00、2:00、9:00、10:00 等? 你需要使用时间数据类型而不是varchar 对不起,我将如何使用联合作为派生查询并在它之外排序?

以上是关于SQL:如何按特定范围的 ID 编号,然后按时间排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BigQuery SQL 中为与按日期排序的主 ID 关联的子 ID 编号?

ORACLE 查询去重保留第一条排序

按特定字段值排序 SQL 查询

如何更新账单编号栏?或在 sql server 的列中按顺序排列

sql查询按时间累计

如何在 Hive SQL 中按日期范围独家加入?