select排序 如何将有特定字符的记录放在前面

来源:百度知道 编辑:UC知道 时间:2024/06/24 16:35:10
比如说有张表里有A、B两个字段,进行select操作。
当A字段里的记录为‘hhh’时,这些记录条显示在最前面,其他不包含'hhh'的记录条再根据B排序显示在后面。
这样能不能实现?如果可以的话请问应该怎么实现呢?
(只能用select,不好用存储过程或是其他的方法)
谢谢!!

太简单了:
SELECT * FROM TABLENAME ORDER BY CASE WHEN A='HHH' THEN '' ELSE B END

注意
THEN子句中的''是字符型字段的最小值.如果B字段是VARCHAR类型,此句就完全可用.如果B字段是整型,则要这样:
SELECT * FROM TABLENAME ORDER BY CASE WHEN A='HHH' THEN 0 ELSE B END
就是说,THEN子句中的值要与B字段相同类型并且要是该类型中的最小值.

SQL语句如下,SQL2005下测试已通过:

-- 创建测试数据表
declare @test1 table(a nvarchar(5),b int)

insert @test1 values('hhh',1)
insert @test1 values('ggg',2)
insert @test1 values('ccc',3)
insert @test1 values('hhh',4)
insert @test1 values('hhh',5)
insert @test1 values('ttt',6)
insert @test1 values('hhh',7)

-- 原表数据显示
select * from @test1

-- 查询排序后显示
select a,b,test2.mark from(
select a,b,1 as mark from @test1 where a='hhh'
UNION all
select a,b,2 as mark from @test1 where a <> 'hhh'
) as test2
orde