在 SQL 服务器中自定义排序
Custom order by in SQL Server
下面是select声明
select *
from #final
order by
case
when [Col1] in (select top 10 [Col1] from #take order by [Col2] desc)
then 0
else 2
end
我上面的select语句returns结果如下
Col1 Col2
--------------------------------------
App 86748
AppService 832
BK 21227
Cap 160272
Fukusima 1634
McBaa 1727
Others 6718
但是,我想得到这个结果:
Col1 Col2
--------------------------------------
Cap 160272
App 86748
BK 21227
McBaa 1727
Fukusima 1634
AppService 832
Others 6718
如何实现?谢谢
你只是两个类型的区别,但是0类型里面,没有二阶方法。只需添加 Col1 作为二阶,降序。
select * from #final
order by
case when [Col1] in (select top 10 [Col1] from #take order by [Col2] desc) then 0
else 2
end, [Col2] desc
具有以下table结构
CREATE TABLE final
([col1] varchar(10), [col2] int)
;
INSERT INTO final
([col1], [col2])
VALUES
('App', 86748),
('AppService', 832),
('BK', 21227),
('Cap', 160272),
('Fukusima', 1634),
('McBaa', 1727),
('Others', 6718)
;
下面的查询将给出准确的结果
select * from final
order by
case when [Col1] in (select top 6 [Col1] from final order by [Col1] asc) then Col2
end desc,
[Col1] asc
col1 | col2
-----------------------
Cap | 160272
App | 86748
BK | 21227
McBaa | 1727
Fukusima | 1634
AppService | 832
Others | 6718
下面是select声明
select *
from #final
order by
case
when [Col1] in (select top 10 [Col1] from #take order by [Col2] desc)
then 0
else 2
end
我上面的select语句returns结果如下
Col1 Col2
--------------------------------------
App 86748
AppService 832
BK 21227
Cap 160272
Fukusima 1634
McBaa 1727
Others 6718
但是,我想得到这个结果:
Col1 Col2
--------------------------------------
Cap 160272
App 86748
BK 21227
McBaa 1727
Fukusima 1634
AppService 832
Others 6718
如何实现?谢谢
你只是两个类型的区别,但是0类型里面,没有二阶方法。只需添加 Col1 作为二阶,降序。
select * from #final
order by
case when [Col1] in (select top 10 [Col1] from #take order by [Col2] desc) then 0
else 2
end, [Col2] desc
具有以下table结构
CREATE TABLE final
([col1] varchar(10), [col2] int)
;
INSERT INTO final
([col1], [col2])
VALUES
('App', 86748),
('AppService', 832),
('BK', 21227),
('Cap', 160272),
('Fukusima', 1634),
('McBaa', 1727),
('Others', 6718)
;
下面的查询将给出准确的结果
select * from final
order by
case when [Col1] in (select top 6 [Col1] from final order by [Col1] asc) then Col2
end desc,
[Col1] asc
col1 | col2
-----------------------
Cap | 160272
App | 86748
BK | 21227
McBaa | 1727
Fukusima | 1634
AppService | 832
Others | 6718