sql - 按 2 个不同的列进行棘手的排序

标签 sql sql-server

我有这样的表:

RefNum         Date        Status
----------------------------------
20276       12/7/2014     Approved
56332       13/7/2014     Approved
HS785       11/7/2014     Approved
52355       10/7/2014     Approved
HS566       15/7/2014     Approved

我需要按 date 列对其进行排序。但棘手的部分是我还需要以“HS”开头的 refnum 也位于按日期排序的结果底部。

所以结果应该是这样的

RefNum         Date        Status
----------------------------------
52355       10/7/2014     Approved
20276       12/7/2014     Approved
56332       13/7/2014     Approved
HS785       11/7/2014     Approved
HS566       15/7/2014     Approved

我绝对不能这样做

SELECT * 
FROM tbl1 
ORDER BY Date, RefNum

因为它将首先返回按日期排序的列表。

有什么想法吗?

最佳答案

准备好大吃一惊:您可以在 order by 中使用 case:

select * 
from tbl 
order by 
    case when RefNum like 'HS%' then 1 else 0 end, 
    Date

SQL Server 允许您几乎在任何地方使用case - group byorder by、聚合函数……这是一个非常强大的工具:)

关于sql - 按 2 个不同的列进行棘手的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29005631/

相关文章:

mysql - 计数、最大值和多个子查询 SQL

c# - 无法连接到 SQL Server session 数据库

sql-server - SQL Server错误: A MERGE statement must be terminated by a semi-colon (;)

mysql - sql查询执行时间很长

sql - 如何在事务中记录事件

sql-server - 如何重命名 SQL Server 中的 XML 节点名称

sql - SQL中如何获取字符串的第一个字符?

sql-server - 如果没有行,使用 Dapper 执行存储过程不会返回列标题

SQL 子字符串 - 删除最后一个字符

MySQL 选择最后一次唯一出现