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 编号?