棘手的排序由2个不同的列

时间:2015-03-12 09:10:14

标签: 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

因为它会先按日期排序列表。

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

准备好让你的思绪开始:你可以在case中使用order by

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

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

答案 1 :(得分:0)

我认为您的最终查询将是这样的:

SELECT
  *
FROM
  tbl1
ORDER BY
  CASE
    WHEN RefNum LIKE `HS%` THEN 1
    ELSE 0
  END
  Date,
  RefNum

因此,它会将整个HS%数据发送到最后,而这些组内部将按DateRefNum提供订单。